ホームページ >データベース >mysql チュートリアル >PHP の MySQLi プリペアド ステートメントで「コマンドが同期していない」エラーが発生するのはなぜですか? それらを修正するにはどうすればよいですか?

PHP の MySQLi プリペアド ステートメントで「コマンドが同期していない」エラーが発生するのはなぜですか? それらを修正するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 01:08:08982ブラウズ

Why Do I Get

PHP のコマンドが同期していないエラー:

の理解と解決

クエリを準備する前に、クエリ「SET NAMES 'utf8'」を実行する必要があります。これは、データベース接続の文字セットを設定し、後続のクエリでのデータの解釈に影響を与えるためです。

MySQL はプリペアド ステートメントでデフォルトでバッファなしのクエリを使用するため、単一のスクリプトで複数のクエリを実行すると問題が発生する可能性があります。 mysqli は、別のクエリを実行する前に 1 つのクエリが完了する必要がある即時クエリを実行します。この問題を解決するには、2 つのオプションがあります:

1. 結果を配列

に抽出します。

このメソッドでは、最初のクエリを実行し、その結果を配列に抽出してから、2 番目のクエリを実行します。以下のコードはこれを示しています:

<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. バッファリングされたクエリ

store_result() を使用して、クエリ結果をバッファリングするよう mysqli に指示し、複数のクエリを同時に実行できるようにします。これを行うには、prepare() ステートメントの後に次の行を追加します:

<code class="language-php">$stmt->store_result();</code>

これにより、クエリ結果がバッファに効果的に保存され、「コマンドが同期していない」エラーが発生することなく 2 番目のクエリを実行できるようになります。

以上がPHP の MySQLi プリペアド ステートメントで「コマンドが同期していない」エラーが発生するのはなぜですか? それらを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。