Erreur de synchronisation des commandes PHP
Lors de l'exécution de plusieurs instructions préparées dans PHP/MySQLi, il est possible de rencontrer le message « Commandes hors de sync, vous ne pouvez pas exécuter la commande maintenant". Cela se produit lorsque les instructions suivantes tentent de s'exécuter alors que les données de résultat précédentes restent non traitées dans le tampon.
Pour résoudre ce problème, il est impératif d'utiliser la fonction mysqli_free_result() pour libérer explicitement les données de résultat stockées avant d'exécuter la suivante. déclaration. De plus, il est crucial d'appeler la fonction next_result() sur l'objet mysqli après l'exécution de chaque instruction pour faire avancer le pointeur interne vers le jeu de résultats suivant.
Dans votre exemple de code spécifique, l'erreur se produit lors de l'exécution de $stmt1 car le résultat de $stmt n'est pas effacé. En appelant explicitement mysqli_free_result($stmt) puis en appelant $mysqli->next_result(), vous pouvez vous assurer que le tampon est vidé et que le pointeur est réinitialisé pour l'instruction suivante.
Exemple de code modifié :
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
$stmt->fetch();
$stmt->free_result();
$stmt->close();
while ($mysqli->more_results()) {
$mysqli->next_result();
}
$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
$stmt1->bind_param('s', $user_id);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($privileges);
$stmt1->fetch();
$stmt1->free_result();
$stmt1->close();
En implémentant ces correctifs, vous éliminerez l'erreur « Commandes désynchronisées » et garantirez que les instructions préparées ultérieures peuvent s'exécuter de manière transparente.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3