MySQL エラー 2014 は、バッファされていない別のクエリがまだアクティブであるときにクエリを実行しようとすると発生しますアクティブ。これは、PDO::ATTR_EMULATE_PREPARES を false に設定してプリペアド ステートメントを使用するときに発生する可能性があります。
PDO::ATTR_EMULATE_PREPARES が true の場合、PDO はプリペアド ステートメントを通常の SQL クエリに変換してエミュレートします。これは、サーバーがデータ行ごとにクエリを 1 回実行することを意味し、バッファリングされていないクエリを同時に実行できるようにします。
ただし、PDO::ATTR_EMULATE_PREPARES が false の場合、PDO は準備されたステートメントをサーバーに送信します。そしてカーソルを開いたままにします。これにより、カーソルが閉じるまで他のクエリが実行されなくなります。
このエラーにはいくつかの解決策があります。
提供されたコード スニペットでは、$stmt2 クエリがループ内で複数回実行されるという問題があります。これは不要であり、パフォーマンスを向上させるためにループの外に移動できます。
位置パラメータ (配列を含む PDO::execute()) の代わりに名前付きパラメータ (PDO::bindParam()) を使用することもお勧めします。準備されたステートメントの場合。これにより、コードが読みやすくなり、SQL インジェクションのリスクが軽減されます。
MySQL エラー 2014 は、バッファリングされていないクエリが適切に処理されていないことが原因である可能性があります。バッファされたクエリを使用するか、fetchAll() を呼び出すか、カーソルを閉じることで、このエラーを回避できます。
以上がMySQL エラー 2014: 「他のバッファされていないクエリがアクティブである間はクエリを実行できません」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。