Maison > base de données > tutoriel mysql > PHP MySQLi « Commandes non synchronisées » : comment corriger l'erreur ?

PHP MySQLi « Commandes non synchronisées » : comment corriger l'erreur ?

Mary-Kate Olsen
Libérer: 2024-11-22 10:38:12
original
621 Les gens l'ont consulté

PHP MySQLi

Commandes PHP désynchronisées : résoudre le dilemme

Lorsque vous travaillez avec PHP et MySQLi pour récupérer des données d'une base de données MySQL, exécutez plusieurs Les instructions peuvent parfois conduire à l'erreur : "Commandes désynchronisées, vous ne pouvez pas exécuter la commande maintenant."

La cause et la solution

Cette erreur se produit lorsque l'objet de connexion ($mysqli) a des résultats en attente d'une requête précédente. Pour le résoudre, vous devez appeler la fonction next_result() sur l'objet $mysqli après chaque instruction préparée.

Considérez cet exemple :

$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();
$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);
// This is where the error occurs
$stmt1->execute();
Copier après la connexion

Dans ce code, l'erreur sera lancé lors de l'exécution de la deuxième instruction ($stmt1). Pour résoudre ce problème, ajoutez la ligne suivante avant d'exécuter $stmt1 :

$mysqli->next_result();
Copier après la connexion

Conseils supplémentaires

  • Assurez-vous de toujours appeler free_result() et close( ) sur l'objet $stmt après chaque exécution de requête.
  • Utilisez des objets $stmt distincts pour chaque instruction préparée si possible.
  • Si vous rencontrez l'erreur même après avoir essayé les solutions ci-dessus, pensez à vérifier les résultats en attente laissés dans le tampon à l'aide de mysqli::more_results() et mysqli::next_result().

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal