ホームページ >バックエンド開発 >PHPチュートリアル >PDO プリペアド ステートメントから最終的なパラメーター挿入された SQL クエリを取得するにはどうすればよいですか?

PDO プリペアド ステートメントから最終的なパラメーター挿入された SQL クエリを取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 17:53:14193ブラウズ

How Can I Retrieve the Final, Parameter-Interpolated SQL Query from a PDO Prepared Statement?

PDO プリペアド ステートメントから生の SQL クエリを取得する

プリペアド ステートメントのコンテキストにおける「生の SQL クエリ文字列」の概念は単純ではありません。 PDOStatement::execute() が準備されたステートメントで呼び出される場合、実行される SQL ステートメントは準備されたステートメント自体とは異なります。

パラメーター値で補間された最終的な SQL クエリへのアクセスは、単純なプロセスではありません。準備されたステートメントに固有のものです。パラメータはクライアント側のプリペアド ステートメントと統合されないため、PDO からアクセスできなくなります。

SQL ステートメントは prepare() 操作中にデータベース サーバーに送信されますが、パラメータはexecute( のときに個別に送信されます) )と呼ばれます。 MySQL は、execute() に続く埋め込み値を含む最終 SQL を明らかにする一般的なクエリ ログを維持します。ただし、このログは PDO の外部にあり、「生の」クエリ文字列を表すものではありません。

回避策の 1 つは、PDO 属性 PDO::ATTR_EMULATE_PREPARES を設定することです。このモードでは、PDO は SQL クエリを実行する前にパラメータを SQL クエリに挿入します。ただし、この方法ではプリペアド ステートメントの有効性が損なわれます。

PDOStatement オブジェクトの $queryString プロパティは解決策として考えられるかもしれませんが、これはオブジェクトの初期化中にのみ設定され、パラメーターの補間は反映されません。書き換えられたクエリを機能として公開すると有益ですが、PDO::ATTR_EMULATE_PREPARES が使用されない限り要件は満たされません。

MySQL サーバーの一般クエリ ログを利用すると、書き換えられたクエリが記録されるため、回避策が得られます。ただし、これはロギング中にのみ適用され、クエリの実行中には適用されません。

以上がPDO プリペアド ステートメントから最終的なパラメーター挿入された SQL クエリを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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