はじめに
PHPでDBへ書き込みなどをした際に、実行したSQLを見る方法です。
$stmt->debugDumpParams();
PDOStatement::debugDumpParams
警告
機密情報が漏れる可能性があるので、本番環境では絶対に使用しないでください。
使い方
使用DB
id | name | age | |
---|---|---|---|
1 | John Doe | john@example.com | 25 |
2 | Jane Smith | jane@example.com | 30 |
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
age INT NOT NULL
);
INSERT INTO users (name, email, age) VALUES
('John Doe', 'john@example.com', 25),
('Jane Smith', 'jane@example.com', 30);
使い方
PDOオブジェクトを作成し、プリペアドステートメントに含まれる情報を直接出力させる。
update_db.php
<?php
// データベース接続情報
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$username = 'root';
$password = '';
try {
// PDOオブジェクトの作成
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL文
$sql = 'SELECT * FROM users WHERE id = :id';
$stmt = $pdo->prepare($sql);
// パラメータのバインド
$id = 1;
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
// debugDumpParams()
echo "クエリの詳細:\n";
$stmt->debugDumpParams();
// 実行
$stmt->execute();
// 結果
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
} catch (PDOException $e) {
echo 'エラー: ' . $e->getMessage();
}
result
SQL: [28] SELECT * FROM users WHERE id = :id
Params: 1
Key: Name: [3] :id
paramno=-1
name=[3] ":id"
is_param=1
param_type=1
おわり
PHPのPDOでどんなSQLが実行されているか見る方法でした。