Maison >base de données >tutoriel mysql >Pourquoi mon code MySQLi génère-t-il une erreur « Commandes désynchronisées » ?
Lorsque vous essayez d'exécuter des requêtes MySQL simultanément, vous pouvez rencontrer l'erreur « Commandes désynchronisées » . Cela se produit lorsque le client MySQL détecte qu'il reste des lignes à extraire d'une requête en cours alors qu'il tente d'en exécuter une nouvelle.
Le client MySQL exige que toutes les lignes à partir d'une requête être récupéré avant de lancer une nouvelle requête. Cela évite la corruption des données et garantit que l'état du client reste synchronisé avec celui du serveur.
1. Pré-récupération des résultats
Vous pouvez utiliser mysqli_store_result() pour récupérer toutes les lignes de la requête externe. Cela demande au client MySQL de mettre les résultats en mémoire tampon, vous permettant ainsi d'exécuter les requêtes suivantes sans interférence.
2. Récupérer tous les résultats
Vous pouvez également utiliser mysqli_result::fetch_all(), qui renvoie l'ensemble de résultats complet sous forme de tableau PHP. Cela vous permet de parcourir le tableau sans avoir à effectuer d'autres requêtes.
Les procédures stockées peuvent renvoyer plusieurs ensembles de résultats, chacun avec ses propres lignes. Pour gérer ce scénario, vous devez utiliser mysqli_multi_query(). Cette méthode lance la procédure stockée et parcourt ses jeux de résultats jusqu'à ce qu'il n'y ait plus d'utilisation de mysqli_next_result().
Dans les scénarios où vous avez des données hiérarchiques représentées dans un tableau plat , envisagez d'utiliser une approche différente de modélisation des données pour simplifier les requêtes.
Pour les personnes utilisant CodeIgnitor 3.0.3 et rencontrant cette erreur, une solution de contournement existe dans le fichier mysqli_driver.php. Plus précisément, à la ligne 262, modifiez la méthode _execute() comme suit :
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!