ホームページ > バックエンド開発 > PHPチュートリアル > MySQLi の「コマンドが同期していない」エラーを修正するにはどうすればよいですか?

MySQLi の「コマンドが同期していない」エラーを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-08 18:24:12
オリジナル
549 人が閲覧しました

How to Fix MySQLi's

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

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