2013-05-02 1 views
6

La documentation de l'erreur mentionnée dans le titre ditPourquoi je reçois l'erreur « Commandes de synchronisation, vous ne pouvez pas exécuter cette commande maintenant »

Si vous obtenez commandes de synchronisation; vous ne pouvez pas exécuter cette commande maintenant dans votre code client, vous appelez les fonctions client dans le mauvais ordre. Cela peut arriver, par exemple, si vous utilisez mysql_use_result() et essayez d'exécuter une nouvelle requête avant d'avoir appelé mysql_free_result(). Cela peut aussi arriver si vous essayez d'exécuter deux requêtes qui renvoient les données sans appeler mysql_use_result() ou mysql_store_result() entre les deux.

D'ici: http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html

Mais en première requête, je ne suis pas aller chercher toutes les données de base de données MySQL, je suis juste insérez. Et dans la deuxième requête, j'obtiens les données de la base de données.

Voici mon code

$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); 

cette étape Upto tout va bien. Mais quand j'exécute la requête suivante Il donne l'erreur

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

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

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

Ici, il donne l'erreur Commands out of sync; you can't run this command now. Je ne peux pas comprendre cette situation

Remarque: Il y a un problème dans la requête, j'ai exécuté la même requête directement à PHPMyAdmin et cela fonctionne très bien.

Répondre

13

Il y a jeu de résultats dans l'attente de la requête:

mysqli_multi_query (connexion $, $ query);

Vous devez utiliser/Résultat du magasin avant de pouvoir procéder à la prochaine requête après: Puisque vous regardez comme vous ne se soucient pas vraiment le premier jeu de résultats, faire après multi requête ..

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

Une autre alternative est de fermer la connexion et commence à nouveau ..

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

tout dépend de vos besoins.

+2

pourquoi est-ce que je dois faire ceci avec mysqli mais pas mysql? – Fearghal

+0

Les fonctions mysql_ * sont obsolètes depuis PHP version 5.5.0. – LightYearsBehind

Questions connexes