PHP MySQL エラー: コマンドが同期していません
PHP コードは、mysqli を使用して 2 つの MySQL クエリを実行しようとしますが、「コマンドが同期していません。現在このコマンドを実行できません」というエラーが発生します。 これは、mysqli プリペアド ステートメント クエリがデフォルトで非バッファ モードになっていることが原因で発生します。
エラーの原因
mysqli はデフォルトでバッファなしモードでクエリを実行します。これは、結果セットがメモリに保存されず、クライアントに直接ストリーミングされることを意味します。 2 つのクエリを使用したため、最初のクエリが実行され、結果セットがストリーミングされます。 ただし、最初のクエリから結果を取得する前に、2 番目のクエリを実行しようとします。 mysqli では 2 番目のクエリを実行する前に最初のクエリの結果を取得する必要があるため、これにより「コマンドが同期していません」エラーが発生します。
解決策: バッファリングされたクエリ
この問題を解決するには、クエリをバッファリングする必要があります。 プリペアドステートメントオブジェクトの store_result()
メソッドを使用できます:
<code class="language-php">$numRecords->execute(); $numRecords->store_result();</code>
クエリをバッファリングすることにより、mysqli は最初のクエリの結果セットをメモリに保存し、2 番目のクエリの実行と競合することなく後で取得できるようにします。
その他の注意事項
コードでは、foreach ループ内でさまざまなクエリを実行しようとしています。
<code class="language-php">$result = $con->query($recordsQuery); $rows = array(); while($row = $result->fetch_assoc()) { $rows[] = $row; }</code>
クエリの結果はすでに $rows
という名前の変数に保存されているため、これは実際には必要ありません。 この変数をループ内で直接使用して、フェッチされた行にアクセスできます。
これらの変更を実装すると、「コマンドが同期していない」エラーが発生することなく MySQL クエリを実行できるようになります。
以上がMySQLi PHP コードで「コマンドが同期していません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。