Erreur de commande désynchronisée en PHP : compréhension et résolution
Avant de préparer une requête, la requête "SET NAMES 'utf8'" doit être exécutée car elle définit le jeu de caractères de la connexion à la base de données et affecte l'interprétation des données dans les requêtes suivantes.
Étant donné que MySQL utilise par défaut des requêtes sans tampon dans les instructions préparées, l'exécution de plusieurs requêtes dans un seul script peut entraîner des problèmes. mysqli effectue des requêtes immédiates qui nécessitent qu'une requête soit terminée avant qu'une autre requête puisse être exécutée. Pour résoudre ce problème, vous avez deux options :
1. Extrayez les résultats dans un tableau
Cette méthode consiste à exécuter la première requête, à extraire ses résultats dans un tableau, puis à exécuter la deuxième requête. Le code ci-dessous le démontre :
<code class="language-php">$con = mysqli_connect("localhost", "user", "password", "db"); if (!$con) { echo "无法连接到 MySQL 服务器。错误代码:%s\n". mysqli_connect_error(); exit; } // 设置字符集 $con->query("SET NAMES 'utf8'"); // 第一个查询 $countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %"; $numRecords = $con->prepare($countQuery); $numRecords->bind_param("s", $brand); $numRecords->execute(); $result = $numRecords->get_result(); // 将结果提取到数组中 $rowcount = $result->num_rows; // 第二个查询 $rows = getRowsByArticleSearch("test", "Auctions", " ");</code>
2. Requête tamponnée
Utilisez store_result()
pour demander à mysqli de mettre en mémoire tampon les résultats des requêtes, vous permettant ainsi d'exécuter plusieurs requêtes simultanément. Pour ce faire, ajoutez la ligne suivante après l'instruction prepare()
:
<code class="language-php">$stmt->store_result();</code>
Cela enregistrera efficacement les résultats de la requête dans un tampon, vous permettant d'exécuter une deuxième requête sans rencontrer d'erreur « commande désynchronisée ».
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!