Maison > Article > base de données > Comment résoudre l'erreur PHP « Commandes désynchronisées » lors de l'utilisation d'instructions préparées MySQLi ?
Erreur de commandes PHP désynchronisées : causes et résolution
Lorsque vous travaillez avec PHP et MySQLi pour récupérer des données d'une base de données à l'aide d'instructions préparées, vous pouvez rencontrer l'erreur « Commandes désynchronisées, vous ne pouvez pas exécuter la commande maintenant ». Ce problème survient généralement lorsque vous tentez d'exécuter plusieurs instructions préparées dans le même script PHP.
L'erreur se produit car la méthode query() de MySQLi, lorsqu'elle est utilisée avec l'option MYSQLI_USE_RESULT, laisse les appels suivants dans un état « périmé ». Pour résoudre ce problème, il est crucial de terminer correctement le traitement des résultats de la première instruction avant de passer à la suivante.
Une solution consiste à appeler mysqli_free_result() après la récupération de chaque ensemble de résultats. Cette fonction libère tous les résultats en attente du tampon, permettant ainsi aux instructions suivantes de s'exécuter avec succès.
Une autre approche efficace consiste à utiliser mysqli::next_result(). Après avoir exécuté chaque instruction préparée, appelez next_result() pour faire avancer le pointeur interne dans MySQLi, garantissant ainsi une synchronisation correcte pour l'instruction suivante. Ceci est particulièrement pertinent lorsque vous travaillez avec des procédures stockées ou plusieurs ensembles de résultats.
Voici un exemple illustrant l'utilisation de next_result() :
<?php $mysqli = new mysqli('localhost', 'user', 'password', 'database'); // Prepare and execute first statement $stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt1->bind_param('s', $username); $stmt1->execute(); $stmt1->store_result(); // Free the result set and advance to the next result $stmt1->free_result(); $mysqli->next_result(); // Prepare and execute second statement $stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?"); $stmt2->bind_param('i', $userId); $stmt2->execute(); $stmt2->store_result(); // Bind results and fetch data $stmt2->bind_result($orderId, $productId, $quantity); while ($stmt2->fetch()) { // Do something with the fetched data } $stmt2->free_result(); $mysqli->close(); ?>
En mettant en œuvre ces stratégies, vous pouvez éviter le " Erreur "Commandes désynchronisées" et assurez l'exécution fluide de plusieurs instructions préparées dans vos scripts PHP.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!