😀
PHPのPDOをpdo-debugを使ってSQLロギングしてみる
最近のフレームワークなどではSQLロギングなんて当たり前だと思いますが、古いシステムなどではまだPDO直で書いてます!!!だったり、パフォーマンスのためPDO直で書いてます!!!とかそういう環境もあるとおもいます。
そんな直PDOをロギングするときに便利なpdo-debugを使ったときのメモ
環境
* PHP 5.6
参考にしたサイト
composer経由でインストールする
panique/pdo-debugのREADMEをそのままやればいいです。
"require-dev": {
"panique/pdo-debug": "0.2"
}
でインストール
composer install
使い方
READMEそのまんまでOKかと
$parameters = array(
'param1' => 'hello',
'param2' => 123,
'param3' => null
);
$sql = "INSERT INTO test (col1, col2, col3) VALUES (:param1, :param2, :param3)";
$query = $database_connection->prepare($sql);
$query->execute($parameters);
# プレースホルダの中身がパースされてSQLが出力される
echo PdoDebugger::show($sql, $parameters);
これに加えて実行時間でも足したらクエリの発行時間とかわかっていいのかと
$parameters = array(
'param1' => 'hello',
'param2' => 123,
'param3' => null
);
$sql = "INSERT INTO test (col1, col2, col3) VALUES (:param1, :param2, :param3)";
# 計測スタート
$time_start = microtime(true);
$query = $database_connection->prepare($sql);
$query->execute($parameters);
# 計測 終了
$time_end = microtime(true);
# プレースホルダの中身がパースされてSQLが出力される
$debug = array(
'time' => $time_end - $time_start,
'sql' => PdoDebugger::show($sql, $parameters)
);
# ログでも吐いてみたらいかがでしょう
error_log(json_encode($debug), 3, "/var/tmp/my-errors.log");
jsonでログを吐けばjqで綺麗に整形してくれるので便利
tail -f /var/tmp/my-errors.log | jq .
簡単なSQLプロファイラの出来上がりです。
Discussion