Maison >base de données >tutoriel mysql >Comment résoudre l'erreur MySQLi « Commandes non synchronisées » ?
Erreur « Commandes désynchronisées » dans MySQLi : une explication complète
MySQLi renvoie l'erreur « Commandes désynchronisées » lorsqu'un nouveau La requête est tentée alors qu'il reste des lignes non lues d'une précédente requête.
Raison de l'erreur
Le protocole client MySQL exige que tous les résultats d'une requête soient récupérés avant qu'une nouvelle requête puisse être exécutée. Cela garantit la cohérence dans la gestion des ensembles de résultats et évite la perte de données.
Solutions
mysqli_store_result() ou mysqli_result::fetch_all():
Récupérez toutes les lignes de la requête externe en utilisant mysqli_store_result() ou récupérez l'ensemble des résultats sous forme de tableau en utilisant mysqli_result::fetch_all(). Cela met en mémoire tampon les résultats dans le client, permettant l'exécution de plusieurs requêtes.
Procédures stockées et mysqli_multi_query() :
Les procédures stockées peuvent renvoyer plusieurs ensembles de résultats. Pour gérer cela, utilisez mysqli_multi_query() et parcourez les résultats à l'aide de mysqli_next_result() jusqu'à ce que tous les ensembles de résultats soient traités.
Extrait de code
Voici une version modifiée du code de la question, en utilisant mysqli_store_result() :
$result = mysqli_query($db, $sql) or exit(mysqli_error($db)); if ($result) { $result->store_result(); // Buffer the result set echo "<table border='1'> <tr><th>id</th> <th>name</th> <th>parent_id</th> <th>parent_name</th> <th>level</th> <th>email</th></tr>"; while ($row = mysqli_fetch_assoc($result)) { $aid = $row["id"]; $sql2 = "SELECT * FROM members WHERE MEMNO = '$aid'"; $result2 = mysqli_query($db, $sql2) or exit(mysqli_error($db)); if ($result = mysqli_fetch_assoc($result2)) { $fname = $ newArray['FNAME']; $lname = $newArray['LNAME']; $mi = $newArray['MI']; $address = $newArray['ADDRESS']; $city = $newArray['CITY']; $state = $newArray['STATE']; $zip = $newArray['ZIP']; $kdate = $newArray['KDATE']; $date = abs(strtotime(date('m/d/Y')) - strtotime(date($kdate))) / (60 * 60 * 24); } echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>", $row["id"],$row["name"], $row["parent_id"],$row["parent_name"], $row["level"],$row["email"]); } echo "</table>"; } mysqli_free_result($result); mysqli_close($db);
Amélioration possible de la conception
Le stockage de données hiérarchiques dans une base de données relationnelle peut conduire à des requêtes complexes. Envisagez d'utiliser des modèles alternatifs, tels que des ensembles imbriqués ou des listes de contiguïté, pour simplifier le stockage et la récupération des données.
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!