Maison > Article > base de données > Erreur PHP MySQLi « Commandes non synchronisées » : comment y remédier ?
Lors de l'exécution de plusieurs instructions préparées dans PHP/MySQLi, vous pouvez rencontrer l'erreur « Commandes désynchronisées ». Cela résulte d'une inadéquation entre le nombre d'instructions exécutées et le nombre de résultats en cours de traitement. Pour résoudre ce problème, envisagez les informations et solutions suivantes :
L'erreur « Désynchronisation » se produit lorsque le client MySQL reçoit plus de données que prévu pour une instruction particulière. Cela se produit lors de l'utilisation de mysqli::query avec l'indicateur MYSQLI_USE_RESULT. Cet indicateur indique à MySQL de ne pas mettre complètement les résultats en mémoire tampon, ce qui entraînerait une désynchronisation des commandes suivantes.
Dans le code fourni, deux instructions préparées sont utilisées pour récupérer les données du base de données. La première instruction récupère les informations utilisateur, tandis que la seconde récupère les privilèges. Cependant, vous rencontrez l'erreur lors de l'exécution de la deuxième instruction.
Pour résoudre l'erreur, vous devez libérer les résultats de la première instruction avant d'exécuter la seconde. Ceci est réalisé en appelant la fonction mysqli_stmt->free_result(). De plus, l'appel de mysqli->next_result() après chaque requête garantit que tous les résultats supplémentaires ont été traités.
Voici un exemple de la façon de résoudre le problème :
$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1"); $stmt->bind_param('s', $loweredEmail); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt); $stmt->fetch(); $stmt->free_result(); $mysqli->next_result(); // Ensure no stray results are present $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();
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!