MySQLi の「コマンドが同期していない」エラーのトラブルシューティング
すべてをフェッチする前に後続のクエリを実行すると、MySQLi の「コマンドが同期していない」エラーが発生します前のクエリの行。これを解決するには、追加のクエリを実行する前に必ずすべての行をフェッチしてください。
エラーの原因:
MySQL クライアントは、行がクエリからフェッチされていない間は新しいクエリの実行を禁止します。進行中のクエリ。これは、データの整合性を維持し、複数の結果セット間の競合を防ぐためです。
考えられる解決策:
1. mysqli_store_result() または mysqli_fetch_all() を使用した行のプリフェッチ
mysqli_store_result() の使用:
$result = mysqli_store_result($db);
使用mysqli_fetch_all():
$result = mysqli_query($db, $sql)->fetch_all();
2.ストアド プロシージャには mysqli_next_result() を使用します
ストアド プロシージャを実行すると、複数の結果セットが返される場合があります。このような場合は、追加のクエリを実行する前に、mysqli_next_result() を使用してすべての結果セットを反復処理し、完了します。
while ($result = mysqli_next_result($db)) { // process the result set }
3.階層の代替データ ストレージ
クエリを簡素化するために、階層データを別の方法で保存することを検討してください。隣接リストやネストされたセット モデルなどのさまざまなデータベース モデルを検討して、データ構造を最適化し、クエリ効率を向上させます。
追加メモ:
CodeIgnitor ユーザーの場合は、このエラーは、mysqli ドライバーの既知の問題が原因で発生します。これを解決するには、ドライバーの _execute() 関数を次のように変更します。
protected function _execute($sql) { $results = $this->conn_id->query($this->_prep_query($sql)); @mysqli_next_result($this->conn_id); // Fix 'command out of sync' error return $results; }
以上がMySQLi の「コマンドが同期していない」エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。