ホームページ >バックエンド開発 >PHPチュートリアル >階層データを取得するときに MySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?
階層の取得中に MySQLi コマンドが同期していないエラーが発生する
複数の MySQLi を実行しようとすると、「コマンドが同期していない」エラーが発生する場合がありますクエリ、特に階層データの取得時。この記事では、この問題を詳しく掘り下げ、その原因を説明し、考えられる解決策を提供します。
根本原因
MySQL クライアントは、行がクエリからフェッチされていない間、新しいクエリの実行を制限します。進行中のクエリ。このエラーは、新しいクエリに進む前にすべての行が順番に取得されるようにするクライアントのプロトコルに起因します。
考えられる解決策
この問題を解決するには、いくつかのオプションが利用可能です。 :
1. mysqli_store_result() を使用する
このメソッドは、外部クエリからのすべての行をクライアント バッファーにプリフェッチします。 MySQL サーバーは結果の完全な取得を承認し、後続のクエリを自由に実行できるようにします。
2. mysqli_result::fetch_all()
を使用すると、mysqli_store_result() と同様に、このメソッドは結果セット全体を PHP 配列として取得し、データの効率的なループとフェッチを可能にします。
3.ストアド プロシージャに mysqli_multi_query() を使用する
ストアド プロシージャには、それぞれ独自の行を含む複数の結果セットが返される可能性があります。これらの結果セットを反復処理するには、mysqli_multi_query() を使用して、結果セットを順番に処理し、MySQL プロトコルに準拠する必要があります。
代替データ ストレージ
ネストされたものの欠点を回避するには階層データ取得でクエリを実行する場合は、より単純なクエリを実行するためにデータを再構築することを検討してください。隣接リストやネストされたセットなどの手法を使用すると、階層を大幅に簡素化できます。
CodeIgnitor 3.0.3 のカスタム ハック
CodeIgnitor 3.0.3 のユーザーの場合、回避策として次の行を変更します。 mysqli_driver.php ファイルの 262。 @mysqli_next_result() を _execute() メソッドに追加することで、「コマンドが同期していない」エラーを軽減できます。
以上が階層データを取得するときに MySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。