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

MySQLi コードで「コマンドが同期していない」エラーが生成されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-24 21:08:25
オリジナル
453 人が閲覧しました

Why Does My MySQLi Code Generate a

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

MySQL クエリを同時に実行しようとすると、「コマンドが同期していない」エラーが発生する場合があります。これは、新しいクエリを実行しようとしているときに、進行中のクエリからフェッチする行がまだあることを MySQL クライアントが検出したときに発生します。

エラーの原因

MySQL クライアントは、すべての行を要求します。新しいクエリを開始する前に、クエリから取得する必要があります。これにより、データの破損が防止され、クライアントの状態がサーバーの状態と同期された状態が維持されます。

問題の解決

1.結果の事前取得

mysqli_store_result() を使用して、外部クエリからすべての行を取得できます。これにより、結果をバッファリングするように MySQL クライアントに指示され、後続のクエリを干渉なしに実行できるようになります。

2.すべての結果をフェッチ

または、完全な結果セットを PHP 配列として返す mysqli_result::fetch_all() を利用することもできます。これにより、それ以上のクエリを実行することなく、配列を反復処理できるようになります。

特殊なケース: ストアド プロシージャ

ストアド プロシージャは、それぞれが独自の行を持つ複数の結果セットを返すことができます。このシナリオに対処するには、mysqli_multi_query() を使用する必要があります。このメソッドはストアド プロシージャを開始し、mysqli_next_result() の使用がなくなるまでその結果セットをループします。

階層データ モデリングの代替手段

フラット テーブルで階層データが表現されているシナリオの場合、クエリを簡素化するために、別のデータ モデリング アプローチの使用を検討してください。

CodeIgnitor 3.0.3 mysqli_next_result()

CodeIgnitor 3.0.3 を使用していてこのエラーが発生した場合の回避策は、mysqli_driver.php ファイルにあります。具体的には、262 行目で、_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 サイトの他の関連記事を参照してください。

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