Maison >base de données >tutoriel mysql >Pourquoi mon code MySQLi génère-t-il une erreur « Commandes désynchronisées » ?

Pourquoi mon code MySQLi génère-t-il une erreur « Commandes désynchronisées » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 21:08:25457parcourir

Why Does My MySQLi Code Generate a

Pourquoi 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.

Cause de l'erreur

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.

Résoudre le problème

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.

Cas particulier : procédures stockées

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().

Alternative de modélisation de données hiérarchiques

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.

Solution de contournement CodeIgnitor 3.0.3 pour mysqli_next_result()

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!

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