ホームページ >データベース >mysql チュートリアル >MySQL がエラー 2014:「他のバッファされていないクエリがアクティブである間はクエリを実行できません」を返すのはなぜですか?

MySQL がエラー 2014:「他のバッファされていないクエリがアクティブである間はクエリを実行できません」を返すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-23 15:42:10819ブラウズ

Why Does MySQL Return Error 2014:

MySQL エラー 2014 の原因: バッファされていない他のクエリがアクティブである間はクエリを実行できない

MySQL のクライアント プロトコルは、結果が返された場合に複数のクエリを同時に実行することを制限しています。以前のクエリの内容が完全には取得されていません。この制限は、一部のクエリのバッファリングされていない性質によって発生します。バッファリングされたクエリのように行がすぐにキャッシュされるのではなく、段階的にフェッチされるためです。

バッファリングされていないクエリを実行し、クエリからすべての行を取得する前に別のクエリを実行しようとすると、まず、MySQL は「他のバッファされていないクエリが実行されている間はクエリを実行できません」というエラーを返します。 active."

エミュレートされたプリペアド ステートメント

PDO::ATTR_EMULATE_PREPARES は、プリペアド ステートメントをエミュレートするか、ネイティブ MySQL プリペアド ステートメントとして実行するかを指定します。 false に設定すると、バッファなしの PHP クエリを使用すると、エラー 2014 が発生する可能性があります。これは、クエリ結果に対する PHP の内部キャッシュ メカニズムがバッファなしのクエリを適切に処理しないためです。

エラーの解決

これを解決するにはいくつかの方法がありますerror:

  • Use Buffered Queries: PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を有効にすると、クエリがバッファモードで実行され、すべての行が一度に自動的にフェッチされます。ただし、結果セットが大きい場合、これはメモリを大量に消費する可能性があります。
  • すべての行をフェッチ: クエリで fetchAll() を呼び出すと、すべての行が確実に取得され、結果カーソルが閉じられます。これにより、後続のクエリをエラーなしで実行できるようになります。
  • カーソルを閉じる: カーソルを閉じるcloseCursor() を使用すると、バッファリングされていないクエリに関連付けられた MySQL のリソースが解放され、後続のクエリが実行できるようになります。ただし、これにより、バッファリングされていないクエリから残りの行をフェッチできなくなります。

ベスト プラクティス

このエラーの発生を回避するには、次のことをお勧めします。

  • バッファなしの場合はデフォルトでバッファ付きクエリまたは fetchAll() を使用します限られた数の行をフェッチするクエリ。
  • ループ内で内部クエリを複数回実行するとエラーが悪化する可能性があるため、必要がない場合はクエリのネストを避けてください。
  • 使用する場合はカーソルを閉じてください。データの取得を完了してサーバー リソースを解放し、エラーの発生を防ぎます。
  • mysqlnd への移行を検討してください。ドライバー。メモリ効率が高く、エミュレートされた準備済みステートメントをサポートします。

以上がMySQL がエラー 2014:「他のバッファされていないクエリがアクティブである間はクエリを実行できません」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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