Domanda

Ho cambiato il mio vecchio query al Mysqli quadro per migliorare le prestazioni.Tutto funziona bene su localhost, ma quando ho caricarlo sul server web restituisce nulla.Dopo il collegamento con I per errori e non c'è nessuno.Ho anche controllato i moduli php installato e mysqli è attivata.

Sono certo che crea una connessione al database non vengono visualizzati errori.(quando ho cambiato il nome del database stringa ha dato l'errore)

Non c'è uscita dalla query sul server del sito, che assomiglia a questo:

$mysqli = new mysqli("server", "user", "password");

if (mysqli_connect_errno()) {
   printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
   exit;
}

// Query used  
$query = "SELECT name FROM users WHERE id = ?";

if ($stmt = $mysqli->prepare("$query")) 
{

    // Specify parameters to replace '?'
    $stmt->bind_param("d", $id);  

    $stmt->execute();

    // bind variables to prepared statement 
    $stmt->bind_result($_userName);

    while ($stmt->fetch()) 
    {
          echo $_userName;
    }


    $stmt->close();
 }
}

//close connection 
$mysqli->close(); 

Come ho già detto, questo codice funziona perfettamente sul mio localserver non solo online.Controllato i log di errore e non c'è niente di tutto i punti di una buona connessione.Tutte le tabelle che pure esiste, etc.Chiunque, di qualsiasi idea, perché questo mi ha bloccato!Inoltre, se posso ottenere questo lavoro, tutti i miei altri query funzionano ancora?O devo farli utilizzare il mysqli quadro così?Grazie in anticipo.

EDIT:

Ok Ho fatto un po 'debug' per vedere cosa sta succedendo.Non ci sono dati nella tabella sono query che corrisponde alla query.Ho fatto il seguente per verificare la preparazione di istruzione:

echo "debug 1";

if ($stmt = $mysqli->prepare("$shiftQuery"))  
{

echo "debug 2";
printf("Error: %s.\n", $stmt->error);

etc...
}

Quindi, in pratica dovrebbe uscita 'debug 1' prima che l'istruzione è preparato (Che non).Poi dopo dovrebbe uscita 'debug 2' e gli eventuali errori che si è verificato.

Il problema è qui da qualche parte dato che non raggiunge il debug 2 linea nell'istruzione IF.Dal momento che i dati di connessione sono belle, davvero non riesco a capire perché il $mysqli oggetto wouldnt essere creato.Che danno a nessuno, altre idee???

grazie

Nessuna soluzione corretta

Altri suggerimenti

Ogni chiamata a un metodo mysqli / stmt può fallire. Si dovrebbe controllare tutti e di ciascuno.
Da provare con error_reporting (E_ALL) e forse display_error = On

<?php
error_reporting(E_ALL); ini_set('display_errors', 1);

// passing database name as fourth parameter
$mysqli = new mysqli("server", "user", "password", 'dbname');
if (mysqli_connect_errno()) {
   printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
   exit;
}

// Query used  
$query = "SELECT name FROM users WHERE id = ?";

if ( false===($stmt=$mysqli->prepare("$query")) ) {
  echo 'mysqli::prepare failed: ', htmlspecialchars($mysqli->error);
  die;
}

// Specify parameters to replace '?'
$rc = $stmt->bind_param("d", $id);  
if ( !$rc ) {
  echo 'bind_param failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: execute()</pre>';
$rc = $stmt->execute();
if ( !$rc ) {
  echo 'execute failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: bind_result()</pre>';
// bind variables to prepared statement 
$rc = $stmt->bind_result($_userName);
if ( !$rc ) {
  echo 'bind_result failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: fetch()</pre>';
while ($stmt->fetch()) 
{
  echo 'username: ', $_userName;
}
echo '<pre>Debug: stmt close()</pre>';
$stmt->close();

echo '<pre>Debug: mysqli close()</pre>';
$mysqli->close();
permesso dell'utente

MySQL è ospite sensibile - può dare user1 da localhost e user1 da altri host diverso permesso.

GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password';

quadro MySQLi non migliora le prestazioni.
Il controllo degli errori deve essere fatto non solo dopo la connessione, ma dopo ogni query eseguire.

Controlla $stmt->error per errori
Oppure provare a controllare contro eccezione Throwed

È Id un numero intero?Io di solito eseguire il mio mysqli come

$sql = "SELECT name FROM users WHERE id = ?";
            if($stmt = $mysqli->mysqli->prepare($sql)){
              $stmt->bind_param("i", $id);
                    if($stmt->execute()){
                        $stmt->bind_result($name);
                        $stmt->store_result();
                        if($stmt->fetch()){
                            return $name;
                         }else{
                             return 'Not Found';
                         }      
                    }else{
                        return 'Execute Error';
                    }

            }else{
                return 'SQL Error';
            }

Speranza che aiuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top