ホームページ > バックエンド開発 > PHPチュートリアル > MySQL の「コマンドが同期していない」エラー: mysqli でのシーケンシャル クエリの問題を解決するには?

MySQL の「コマンドが同期していない」エラー: mysqli でのシーケンシャル クエリの問題を解決するには?

Barbara Streisand
リリース: 2025-01-04 13:13:08
オリジナル
708 人が閲覧しました

MySQL `Commands Out of Sync` Error: How to Resolve Sequential Query Issues with mysqli?

MySQL: コマンドが同期していないエラー

問題:

ユーザーに「コマンド」が発生する同期していません。複数のコマンドを実行しようとすると、「現在このコマンドを実行できません」というエラーが発生します。 MySQL は、mysqli を使用して順次クエリを実行します。

原因:

このエラーは、mysqli がプリペアド ステートメントに対してデフォルトでバッファなしのクエリを使用するために発生します。これは、次のクエリを実行する前に最初のクエリの結果を取得する必要があることを意味します。

解決策:

この問題を解決するには 2 つの方法があります:

方法 1: 結果をArray

最初のクエリの結果を配列にフェッチし、それをループします。このアプローチには次の手順が含まれます:

  1. 最初のクエリを実行します。
  2. mysqli_fetch_all() または $stmt->fetch_all() を使用してすべての行を配列にフェッチします。
  3. mysqli_free_result() を使用して結果を解放するか、 $stmt->free_result().
  4. 2 番目のクエリを実行します。

方法 2: クエリをバッファリングします

バッファリングするように mysqli を構成しますmysqli_stmt_store_result() を使用したクエリ。このアプローチには次の手順が含まれます:

  1. 最初のクエリを準備します。
  2. クエリを実行します。
  3. $stmt->store_result() を呼び出して結果をバッファします。 .
  4. 2 番目を実行query.

実装:

たとえば、提供されたコードでメソッド 2 を実装するには:

...
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    ...
}
...
ログイン後にコピー

追加注:

  • について準備されていないステートメント (mysqli_query() を使用) の場合、デフォルトの動作はバッファリングされます。
  • 「SELECT *」クエリの使用中にエラーが発生した場合は、作成中の一時テーブルが原因である可能性があります。クエリの順序に不一致が発生します。

以上がMySQL の「コマンドが同期していない」エラー: mysqli でのシーケンシャル クエリの問題を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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