Maison > développement back-end > tutoriel php > Pourquoi est-ce que je reçois une erreur « Commandes désynchronisées » avec les instructions préparées MySQL en PHP ?

Pourquoi est-ce que je reçois une erreur « Commandes désynchronisées » avec les instructions préparées MySQL en PHP ?

Mary-Kate Olsen
Libérer: 2024-12-23 07:57:48
original
155 Les gens l'ont consulté

Why Am I Getting a

Commandes désynchronisées, problème de déclaration préparée MySQL

Vous rencontrez une erreur « Commandes désynchronisées » lorsque vous tentez d'exécuter deux MySQL requêtes utilisant mysqli et PHP. Cette erreur se produit lorsque plusieurs requêtes sans tampon sont en cours et que les commandes ne sont pas exécutées dans le bon ordre.

Dans votre code, vous avez préparé deux requêtes : $countQuery et $recordsQuery. Cependant, par défaut, mysqli utilise des requêtes sans tampon pour les instructions préparées. Cela signifie que les résultats de chaque requête doivent être récupérés avant d'exécuter la requête suivante.

Cause de l'erreur

Votre code tente d'exécuter $recordsQuery dans la boucle de $ countQuery. Étant donné que les résultats de $countQuery ne sont pas récupérés, mysqli traite cela comme une requête sans tampon et procède à l'exécution de $recordsQuery dans le désordre. Cela provoque l'erreur « Commandes non synchronisées ».

Solution

Pour résoudre ce problème, vous avez deux options :

  • Récupérer les résultats de la première requête : Récupérez les résultats de $countQuery dans un tableau en utilisant $numRecords->get_result(). Cela mettra les résultats en mémoire tampon et vous permettra d'exécuter $recordsQuery par la suite.
  • Utilisez mysqli store_result() : Vous pouvez également utiliser la méthode $stmt->store_result() avant de récupérer les résultats. . Cela mettra en mémoire tampon les résultats en interne sans nécessiter un tableau supplémentaire.

Exemple avec store_result()

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the query results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
    // Continue with your code...
Copier après la connexion

Remarque :

Si vous utilisez $countQuery pour compter les lignes avant $recordsQuery, assurez-vous de libérer le résultat de $countQuery en utilisant $numRecords->free_result() avant d'exécuter $recordsQuery. Ce n'est pas nécessaire si vous utilisez store_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