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 ?
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 :
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...
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!