2013-05-02 24 views
6

la documentazione l'errore descritto nella dice il titoloperché sto ottenendo l'errore "Comandi fuori sincrono, non è possibile eseguire questo comando ora"

Se si ottiene Comandi fuori sincrono; non è possibile eseguire questo comando ora nel codice , si stanno chiamando le funzioni client nell'ordine sbagliato.

Questo può accadere, ad esempio, se si utilizza mysql_use_result() e provare ad eseguire una nuova query prima di aver chiamato mysql_free_result(). Può anche accadere se si tenta di eseguire due query che restituiscono dati senza chiamare mysql_use_result() o mysql_store_result() in mezzo.

Da qui: http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html

ma in prima query non sto il recupero di tutti i dati dal database mysql, sto solo inserimento. E nella seconda query sto ricevendo i dati dal database.

Ecco il mio codice

$connection = mysqli_connect("localhost","username","password","tbl_msgs"); 
if(mysqli_connect_errno($connection)) 
{ 
    die("Failed to connect to MySQL: " . mysqli_connect_error()); 
} 
$query = "INSERT INTO users (total_comments, total_views) 
      VALUES ({$total_comments}, {$total_views});"; 

$query .= "INSERT INTO msgs (notifications) VALUES ({$notifications})"; 

mysqli_multi_query($connection,$query); 

Fino a questo punto ogni cosa va bene. Ma quando eseguo la seguente query dà l'errore

$select_query = "SELECT * FROM msgs WHERE msg_id = {$msg_id}"; 

$result_set = mysqli_query($connection,$select_query); 

if(!$result_set) { 
    die(mysqli_error($connection)); 
} 

Qui dà l'errore Commands out of sync; you can't run this command now. Non riesco a capire questa situazione

Nota: c'è qualche problema nella query, ho eseguito la stessa query direttamente su PHPMyAdmin e funziona correttamente.

risposta

13

Non ci sono set di risultati in attesa dalla query:

mysqli_multi_query ($ connection, $ query);

è necessario utilizzare risultato/negozio prima di poter procedere con la successiva query dopo: Dal momento che si guarda come non si ha realmente a cuore il primo set di risultati, fare questo dopo che la più richiesta ..

do 
{ 
    $result = mysqli_store_result($connection); 
    mysqli_free_result($result); 
}while(mysqli_next_result()); 

Un'altra alternativa è quella di chiudere la connessione e inizia di nuovo ..

mysqli_close($connection); 
$connection = mysqli_connect("localhost","username","password","tbl_msgs"); 

tutto dipende dalle vostre esigenze.

+2

perché devo fare questo con mysqli ma non con mysql? – Fearghal

+0

Le funzioni mysql_ * sono obsolete da PHP versione 5.5.0. – LightYearsBehind

Problemi correlati