ホームページ > バックエンド開発 > PHPチュートリアル > PDO プリペアド ステートメントによって実行された実際の SQL クエリを確認するにはどうすればよいですか?

PDO プリペアド ステートメントによって実行された実際の SQL クエリを確認するにはどうすればよいですか?

DDD
リリース: 2024-12-31 11:48:16
オリジナル
838 人が閲覧しました

How Can I See the Actual SQL Query Executed by My PDO Prepared Statement?

PDO プリペアド ステートメントによって実行される生の SQL クエリを取得する方法

PDO プリペアド ステートメントをデバッグする場合、多くの場合、生の SQL クエリ文字列にアクセスできると便利です。が処刑された。ただし、準備されたステートメントでは通常、実際のクエリからパラメーター データを分離する必要があるため、これを行う方法はすぐには明確ではありません。

PDO の準備されたステートメントの内部処理

通常の SQL ステートメントとは異なり、クエリとパラメータは一緒にデータベースに送信されますが、準備されたステートメントは 2 つの部分に分割されます:

  • SQL ステートメントは別々にデータベースに送信されます。 prepare() メソッドの呼び出し中に。
  • パラメータ値は、execute() メソッドの呼び出し中に送信されます。

この分離により、SQL インジェクション攻撃が防止されます。ただし、これは、PDO が補間されたパラメーター値を含む結合されたクエリ文字列に直接アクセスできないことも意味します。

PDO::ATTR_EMULATE_PREPARES オプション

補間されたクエリ文字列にアクセスするには、1 つのオプションが必要ですPDO::ATTR_EMULATE_PREPARES 属性を設定することです。このモードでは、PDO がクライアント側で準備されたクエリを強制的にエミュレートし、データベースに送信する前にクエリとパラメータを結合します。

ただし、この方法には次の点に注意してください。

  • 真の準備済みステートメントのセキュリティ上の利点が失われます。
  • PDO は依然として補間されたクエリ文字列を公開しません

MySQL 一般クエリ ログの使用

MySQL を使用している場合は、一般クエリ ログを有効にして補間されたクエリ文字列をキャプチャできます。ただし、このアプローチでは、クエリがすでに実行されている必要があります。

その他の方法

残念ながら、エミュレーションやロギングに頼らずに、補間されたクエリ文字列を PDO から直接取得する信頼できる方法はありません。

以上がPDO プリペアド ステートメントによって実行された実際の SQL クエリを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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