ホームページ >バックエンド開発 >PHPチュートリアル >階層データを取得するときに MySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?

階層データを取得するときに MySQLi で「コマンドが同期していません」エラーが発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 09:31:121022ブラウズ

Why Am I Getting a

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。