ホームページ > データベース > mysql チュートリアル > MySQLi PHP コードで「コマンドが同期していません」エラーが発生するのはなぜですか?

MySQLi PHP コードで「コマンドが同期していません」エラーが発生するのはなぜですか?

DDD
リリース: 2025-01-23 00:57:12
オリジナル
190 人が閲覧しました

Why Am I Getting the

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 サイトの他の関連記事を参照してください。

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