MySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?
MySQL クライアントでは新しいクエリの実行が許可されていません進行中のクエリからフェッチされる行がまだ残っています。 「コマンドが同期していない」の詳細については、一般的なエラーに関する MySQL ドキュメントを参照してください。
解決策:
mysqli_store_result() を使用して、すべての行をプリフェッチします。外側のクエリ。これにより、それらが MySQL クライアントにバッファリングされるため、サーバーはアプリが結果セット全体をフェッチしたと認識します。その後、バッファリングされた外部結果セットから行をフェッチするループ内であっても、さらにクエリを実行できます。
あるいは、完全な結果セットを PHP 配列として返す mysqli_result::fetch_all() を使用します。その後、その配列を反復処理できます。
ストアド プロシージャの特殊なケース:
ストアド プロシージャは、それぞれ独自の行セットを持つ複数の結果セットを返すことができます。したがって、mysqli_multi_query() を使用し、mysqli_next_result() が追加の結果セットを返さなくなるまでループする必要があります。これは、ストアド プロシージャの結果セットが 1 つしかない場合でも、MySQL プロトコルを満たすために必要です。
注:
ネストされたクエリは、階層を表すためによく使用されます。データですが、より単純なクエリを使用する代替方法の方が望ましい場合があります。クエリを容易にするために、データを別の方法で保存することを検討してください。
以上がMySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。