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

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

Mary-Kate Olsen
リリース: 2024-12-15 17:53:14
オリジナル
191 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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