Maison > base de données > tutoriel mysql > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-22 10:38:12
original
490 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!

source:php.cn
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