Maison > base de données > tutoriel mysql > Pourquoi est-ce que j'obtiens des erreurs « Commandes non synchronisées » dans les instructions préparées MySQLi de PHP et comment puis-je les corriger ?

Pourquoi est-ce que j'obtiens des erreurs « Commandes non synchronisées » dans les instructions préparées MySQLi de PHP et comment puis-je les corriger ?

Linda Hamilton
Libérer: 2025-01-23 01:08:08
original
981 Les gens l'ont consulté

Why Do I Get

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal