0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なにもわからないAdvent Calendar 2024

Day 2

PHPで実行したSQLを見る方法

Posted at

はじめに

PHPでDBへ書き込みなどをした際に、実行したSQLを見る方法です。
$stmt->debugDumpParams();
PDOStatement::debugDumpParams

警告
機密情報が漏れる可能性があるので、本番環境では絶対に使用しないでください。

使い方

使用DB

id name email 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が実行されているか見る方法でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?