Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Commandes désynchronisées » dans MySQLi ?

Comment corriger l'erreur « Commandes désynchronisées » dans MySQLi ?

DDD
DDDoriginal
2024-12-23 07:08:21923parcourir

How to Fix the

Dépannage de l'erreur « Commandes désynchronisées » dans MySQLi

Dans MySQLi, tentative d'exécution d'une nouvelle requête avant de récupérer toutes les lignes d'une requête en cours La requête peut conduire à l'erreur « Commandes non synchronisées ». Cette erreur indique une inadéquation entre les attentes du client et du serveur, le serveur s'attendant à ce que le client récupère toutes les lignes avant d'émettre des requêtes ultérieures.

Comprendre le problème

Pour comprendre étant la cause première de cette erreur, il est important de savoir que le comportement par défaut de MySQLi est de récupérer les résultats ligne par ligne à l'aide des fonctions mysqli_fetch_*. Lorsqu'une nouvelle requête est exécutée alors que les lignes d'une requête précédente sont encore disponibles, le client et le serveur se désynchronisent.

Solutions possibles

1. Résultats de pré-récupération :

Utilisez mysqli_store_result() pour pré-récupérer toutes les lignes de la requête initiale. Cela met en mémoire tampon les résultats côté client, vous permettant d'exécuter des requêtes ultérieures sans provoquer de problème de synchronisation.

2. Renvoie tous les résultats sous forme de tableau :

Vous pouvez également utiliser mysqli_result::fetch_all() pour récupérer toutes les lignes sous forme de tableau PHP. Cette approche élimine également le besoin de récupération ligne par ligne, résolvant ainsi le problème de « désynchronisation ».

3. Gestion des procédures stockées :

Les procédures stockées peuvent renvoyer plusieurs ensembles de résultats. Dans de tels cas, il est nécessaire de parcourir les jeux de résultats en utilisant mysqli_multi_query() et mysqli_next_result(). Cela garantit que le client récupère toutes les lignes de chaque ensemble de résultats avant d'exécuter de nouvelles requêtes.

Considérations supplémentaires

  • Hiérarchie des données : Si vos données représentent une hiérarchie et vous utilisez des requêtes imbriquées pour les récupérer, pensez à restructurer vos données pour rendre les requêtes plus nombreuses efficace.
  • CodeIgnitor Hack : Si vous utilisez CodeIgnitor 3.0.3 ou une version antérieure, vous pouvez appliquer un hack pour résoudre ce problème. Ce hack implique de modifier la fonction _execute dans system/database/drivers/mysqli/mysqli_driver.php pour appeler @mysqli_next_result($this->conn_id) après chaque requête.

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:
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