コマンドが同期していない、MySQL プリペアド ステートメントの問題
2 つの MySQL を実行しようとすると、「コマンドが同期していない」というエラーが発生しますmysqli と PHP を使用したクエリ。このエラーは、複数のバッファリングされていないクエリが進行中で、コマンドが正しい順序で実行されない場合に発生します。
コードでは、$countQuery と $recordsQuery という 2 つのクエリを準備しました。ただし、デフォルトでは、mysqli は準備されたステートメントに対してバッファーなしのクエリを使用します。これは、次のクエリを実行する前に各クエリの結果を取得する必要があることを意味します。
エラーの原因
コードが $ のループ内で $recordsQuery を実行しようとしています。 countQuery。 $countQuery の結果はフェッチされないため、mysqli はこれをバッファされていないクエリとして扱い、$recordsQuery を順不同で実行します。これにより、「コマンドが同期していません」エラーが発生します。
解決策
この問題を解決するには、2 つのオプションがあります:
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 サイトの他の関連記事を参照してください。