ホームページ > バックエンド開発 > PHPチュートリアル > PHP の MySQL プリペアド ステートメントで「コマンドが同期していません」エラーが発生するのはなぜですか?

PHP の MySQL プリペアド ステートメントで「コマンドが同期していません」エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-23 07:57:48
オリジナル
155 人が閲覧しました

Why Am I Getting a

コマンドが同期していない、MySQL プリペアド ステートメントの問題

2 つの MySQL を実行しようとすると、「コマンドが同期していない」というエラーが発生しますmysqli と PHP を使用したクエリ。このエラーは、複数のバッファリングされていないクエリが進行中で、コマンドが正しい順序で実行されない場合に発生します。

コードでは、$countQuery と $recordsQuery という 2 つのクエリを準備しました。ただし、デフォルトでは、mysqli は準備されたステートメントに対してバッファーなしのクエリを使用します。これは、次のクエリを実行する前に各クエリの結果を取得する必要があることを意味します。

エラーの原因

コードが $ のループ内で $recordsQuery を実行しようとしています。 countQuery。 $countQuery の結果はフェッチされないため、mysqli はこれをバッファされていないクエリとして扱い、$recordsQuery を順不同で実行します。これにより、「コマンドが同期していません」エラーが発生します。

解決策

この問題を解決するには、2 つのオプションがあります:

  • 最初のクエリの結果をフェッチします: 次を使用して $countQuery の結果を配列にフェッチします$numRecords->get_result()。これにより、結果がバッファリングされ、後で $recordsQuery を実行できるようになります。
  • mysqli store_result(): あるいは、結果を取得する前に $stmt->store_result() メソッドを使用することもできます。 。これにより、追加の配列を必要とせずに結果が内部でバッファリングされます。

store_result() の例

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the query results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
    // Continue with your code...
ログイン後にコピー

注:

$countQuery を使用して $recordsQuery の前に行をカウントする場合は、必ず$recordsQuery を実行する前に $numRecords->free_result() を使用した $countQuery の結果。 store_result.

を使用する場合、これは必要ありません。

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

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