ホームページ > バックエンド開発 > PHPチュートリアル > MySQL クエリを使用した PHP で「コマンドが同期していない」エラーが発生するのはなぜですか?

MySQL クエリを使用した PHP で「コマンドが同期していない」エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2024-12-19 21:28:16
オリジナル
188 人が閲覧しました

Why Do I Get a

MySQL クエリを使用した PHP コードでの「コマンドが同期していない」エラー

mysqli を使用して複数の MySQL クエリを含む PHP スクリプトを実行すると、 「コマンドが同期していません。現在このコマンドを実行できません。」というエラーが発生する可能性があります。この問題は、前のクエリの結果を取得して処理する前、または MySQL サーバーのクエリ コマンドのキャッシュをクリアする前に、後続のクエリが試行された場合に発生します。

質問で提供されているコードは 2 つのクエリを実行します。1 つはレコードをカウントするためのもので、もう 1 つはクエリです。検索文字列に基づいて行を取得します。ただし、最初のクエリの結果がフェッチされる前に、2 番目のクエリが実行されます。これにより、「非同期」エラーが発生します。

エラーの原因

  • バッファなしのクエリ: MySQLI はデフォルトでバッファなしのクエリを使用します。準備されたステートメントの場合、結果が利用可能になったときに部分的にストリーミングされることを意味します。最初のクエリの結果をバッファリングする前に後続のクエリを試行すると、コマンドが同期されなくなり、エラーが発生する可能性があります。
  • 不完全なクエリ実行: クエリが適切に処理されずに複数のクエリが試行されると、その結果、不完全なコマンドがサーバーのキャッシュに蓄積される可能性があります。これにより、後続のクエリが中断され、エラーが発生する可能性があります。

考えられる解決策

  • バッファ結果: このエラーを回避するには、次のようにします。 $stmt->store_result() を使用して、次のクエリを実行する前にクエリの結果をバッファします。 1つ。 $stmt->fetch() を使用してバッファリングされた結果をフェッチし、$stmt->free_result() でサーバーのキャッシュをクリアします。
  • 最初のクエリ結果をフェッチ: または、すべてフェッチします。最初のクエリの結果を配列に変換します。これにより、結果が消費され、フェッチされていない結果による干渉を受けることなく後続のクエリを実行できるようになります。
  • トランザクションを使用する: 複数のクエリが関連しており、順番に実行する必要がある場合は、トランザクションを使用してプロセスを処理することを検討してください。単一の原子としてunit.

$stmt->store_result():

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
$con->query("SET NAMES 'utf8'");
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
}
ログイン後にコピー
を使用して最初のクエリの結果をバッファリングする例を次に示します。

以上がMySQL クエリを使用した PHP で「コマンドが同期していない」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート