PDO プリペアド ステートメントから生の SQL クエリ文字列を取得する
クエリの実行に PDO プリペアド ステートメントを利用する場合、デバッグ目的で役立つ場合があります。実行された生の SQL 文字列を取得します。ただし、パラメータ化されたクエリとは異なり、プリペアド ステートメントはクライアント側の SQL クエリとパラメータを結合しません。
SQL ステートメントとパラメータは、prepare() およびexecute() オペレーション中にデータベース サーバーに個別に送信されます。 、 それぞれ。その結果、PDO はパラメータと組み合わされた SQL 文字列にアクセスできません。
MySQL 一般クエリ ログ:
補間値を含む最終クエリをキャプチャする 1 つの方法は、次を使用することです。 MySQL の一般的なクエリ ログ。このログには、execute() 呼び出し後の最後の SQL ステートメントが記録されます。ただし、この手法では、MySQL サーバーで一般クエリ ログを有効にする必要があります。
PDO Prepared Statement Emulation:
別のオプションは、PDO 属性 PDO::ATTR_EMULATE_PREPARES を有効にすることです。 。このモードでは、PDO は実行中に SQL クエリを送信する前にパラメータを SQL クエリに挿入します。ただし、このメソッドは真のプリペアド ステートメントの実行ではなく、プリペアド クエリを使用する利点を回避することに注意することが重要です。
PDOStatement プロパティの混乱:
への最初のアクセス試行補間されたクエリには、PDOStatement プロパティ $queryString の参照が含まれる場合があります。ただし、このプロパティは PDOStatement コンストラクター中にのみ設定され、パラメーターがクエリに挿入されるときは更新されません。
書き換えられたクエリの公開:
の潜在的な機能改善PDO は、書き換えられたクエリを公開することになります。このアプローチでも、PDO::ATTR_EMULATE_PREPARES を使用する場合にのみ完全なクエリが提供されます。
回避策:
代わりに、MySQL サーバーの一般的なクエリ ログを利用することもできます。クエリの実行後に、補間されたパラメータ値を使用して書き換えられたクエリを表示します。
以上がPDO プリペアドステートメントから最終的な SQL クエリ文字列を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。