Erreur : "Commandes non synchronisées" lors de l'utilisation de MySQLi
Problème :
Un tenter d'exécuter plusieurs requêtes MySQLi simultanément déclenche l'erreur "Commandes désynchronisées". Les requêtes imbriquées récupèrent des données hiérarchiques.
Cause :
MySQL n'autorise pas l'exécution de nouvelles requêtes tant que les lignes d'une requête en cours ne sont pas récupérées.
Solution :
Option 1 : Utilisez mysqli_store_result()
$result = mysqli_store_result($db); // Execute subsequent queries
Cela met en mémoire tampon les lignes du client MySQL, permettant ainsi l'exécution de plusieurs requêtes.
Option 2 : Utiliser mysqli_result::fetch_all()
$result = mysqli_query($db, $sql); $data = mysqli_fetch_all($result, MYSQLI_ASSOC); // Execute subsequent queries
Cela renvoie l'ensemble des résultats sous forme de tableau, permettant l'exécution de plusieurs requêtes.
Considération :
Les requêtes imbriquées indiquent un stockage de données hiérarchique. Envisagez des modèles de données alternatifs ou utilisez des frameworks comme CodeIgnitor pour gérer plusieurs ensembles de résultats à partir de procédures stockées à l'aide de mysqli_next_result().
Implémentation de CodeIgnitor :
// Edit code in system/database/drivers/mysqli/mysqli_driver.php protected function _execute($sql) { $results = $this->conn_id->query($this->_prep_query($sql)); @mysqli_next_result($this->conn_id); // Fix 'command out of sync' error return $results; }
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!