PDO と同時にクエリを実行すると MySQL エラー 2014 が発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-19 01:23:02
オリジナル
1032 人が閲覧しました

Why Does MySQL Error 2014 Occur When Executing Queries Concurrently with PDO?

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

概要

このエラーは、複数のクエリを同時に実行しようとすると発生しますPDO::ATTR_EMULATE_PREPARES を false に設定して PDO を使用しているとき。これは、以前のバッファリングされていないクエリがすべて取得されるまで、MySQL サーバーが追加のクエリの実行を処理できないことを示しています。

エラーの理由

PDO のデフォルトの動作は、プリペアド ステートメントをバッファリングされていないクエリに変換することでエミュレートすることです。 。バッファリングされていないクエリはすぐに実行され、結果はクライアント側に保存されません。これにより、大規模な結果セットをメモリ効率よく処理できるようになります。

ただし、このモードで動作する場合、MySQL にはバッファリングされていないクエリの進行中に後続のクエリを実行できないという制限が課されます。これがエラー 2014 の原因です。

解決策

このエラーを解決するには、いくつかの方法があります:

  1. バッファされたクエリを有効にする: PDO オブジェクトの接続パラメータで PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を true に設定できます。これにより、PDO にバッファーされたクエリを使用するよう指示されます。これにより、結果がクライアント側に保存され、クエリの同時実行が可能になります。
  2. Use fetchAll() or closeCursor(): バッファーなしのクエリを実行するたびに、 PDOStatement::fetchAll() を使用すると、すべての結果を一度に取得できます。あるいは、closeCursor() を呼び出すと、バッファリングされていないクエリに関連付けられたサーバー リソースが解放され、後続のクエリを実行できるようになります。
  3. mysqlnd に切り替えます: mysqlnd ライブラリは、MySQL 用のより高度で効率的なドライバを提供します。 。バッファなしのクエリとバッファありのクエリの両方をサポートし、クエリの同時実行をより効果的に処理します。

推奨ベスト プラクティス

最適なパフォーマンスと効率を実現するには、大規模な結果セットを処理する場合はバッファ付きクエリを使用することをお勧めします。または同時実行性が重要な場合。サーバー リソースを解放するには、バッファリングされていないクエリを実行するたびに FetchAll() または closeCursor() を使用する必要があります。さらに、MySQL の接続性とパフォーマンスを向上させるために、mysqlnd を使用することを強くお勧めします。

以上がPDO と同時にクエリを実行すると MySQL エラー 2014 が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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