Maison > développement back-end > tutoriel php > Erreur MySQL « Commandes non synchronisées » : comment résoudre les problèmes de requêtes séquentielles avec mysqli ?

Erreur MySQL « Commandes non synchronisées » : comment résoudre les problèmes de requêtes séquentielles avec mysqli ?

Barbara Streisand
Libérer: 2025-01-04 13:13:08
original
709 Les gens l'ont consulté

MySQL `Commands Out of Sync` Error: How to Resolve Sequential Query Issues with mysqli?

MySQL : Erreur de synchronisation des commandes

Problème :

Les utilisateurs rencontrent le message « Commandes désynchronisé ; vous ne pouvez pas exécuter cette commande maintenant » lors de la tentative d'exécution séquentielle de plusieurs requêtes MySQL à l'aide de mysqli.

Cause :

Cette erreur se produit car mysqli utilise par défaut des requêtes sans tampon pour les instructions préparées. Cela signifie que les résultats de la première requête doivent être récupérés avant d'exécuter la suivante.

Solution :

Il existe deux façons de résoudre ce problème :

Méthode 1 : Récupérer les résultats dans un tableau

Récupérer les résultats du interrogez d’abord un tableau et parcourez-le. Cette approche implique les étapes suivantes :

  1. Exécutez la première requête.
  2. Récupérez toutes les lignes dans un tableau à l'aide de mysqli_fetch_all() ou $stmt->fetch_all().
  3. Libérez le résultat en utilisant mysqli_free_result() ou $stmt->free_result().
  4. Exécutez la deuxième requête.

Méthode 2 : mise en mémoire tampon des requêtes

Configurez MySQL pour mettre en mémoire tampon les requêtes utilisant mysqli_stmt_store_result(). Cette approche implique les étapes suivantes :

  1. Préparez la première requête.
  2. Exécutez la requête.
  3. Appelez $stmt->store_result() pour mettre les résultats en mémoire tampon. .
  4. Exécuter le deuxième requête.

Implémentation :

Par exemple, pour implémenter la méthode 2 dans le code fourni :

...
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    ...
}
...
Copier après la connexion

Supplémentaire Notes :

  • Pour les relevés non préparés (en utilisant mysqli_query()), le comportement par défaut est mis en mémoire tampon.
  • Si vous rencontrez l'erreur lors de l'utilisation d'une requête "SELECT *", cela peut être dû à la création d'une table temporaire, ce qui peut provoquer des incohérences dans l'ordre des requêtes.

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