WebアプリケーションからSQLを発行する際に
入れておくといいかも知れないので紹介
1 2 3 4 5 6 7 8 9 10 |
include db.php class user{ function getUser() { $DB = new DB(); $sql = "SELECT * FROM user_master"; $result = $DB->execSql($sql); /* まぁもろもろ */ } } |
WebアプリケーションからSQL実行する際に
どこから呼ばれて、何処のメソッドかわかるようにしたいので
db.phpクラスに以下のような感じにしておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class DB { /* まぁもろもろ */ function __construct(){ } function connect(){ } function execSql($sql ,$pa=array()){ //debug_backtrace関数 $debuglist = debug_backtrace(); $tmp_val = array_shift($debuglist); $filename = $tmp_val['file']; $tmp_ = explode('/',$filename); $filename = array_pop($tmp_); $tmp_val = array_shift($debuglist); $function_name = $tmp_val['function']; //SQLの先頭に呼び出し元ファイル名と実行されているfunction名を //コメントで追加して改行する $sql = "-- ".$filename." ".$function_name."\n".$sql; $sth = $this->db->prepare($sql); try{ $sth->execute($pa); $result = $sth; }catch (Exception $e) { $this->error(); } return $result; } } |
やってる事は単純で
呼び出し元のファイル名とファンクション名を取り出してるだけ。
コレを発行するSQLの頭に付けてやり、末尾に改行を入れてやればそのままクエリは発行できます。
そうすると、mysql側で
1 |
show processlist\G |
とかすると
1 2 3 4 5 6 7 8 9 |
Id: xxxxxxxxxx User: hogehoge Host: 127.0.0.1:xxxxx db: fuga Command: Query Time: 0 State: Sending data Info: -- user.php getUser SELECT * FROM user_master |
的な結果が見れるのでいかがでしょうか。
トラブルや、高負荷時に何処のクエリが原因かすぐさま確認したい! といった時や
結果取れてるけど、このSQLは何処から呼ばれてるんだろう?
といった時に役にたつと思います。
1 |
echo Utility::last_query(); |
的な機能があれば、デバッグ時にも当然役に立ちますし。
この記事を書いた人

-
株式会社ホットポット(現 イー・ガーディアン株式会社)(アルバイト)2005年1月~2006年4月
↓
株式会社エディア 2006年4月〜2007年7月
↓
株式会社パクレゼルヴ 2007年8月〜2010年7月
↓
グルーポン・ジャパン株式会社 2010年8月〜2011年12月
↓
ミューズコー株式会社 2012年2月3日〜2013年12月31日
株式会社パクレゼルヴ からの出向扱いにて所属。
↓
株式会社PRECS 2014年1月
いっぱい会社渡り歩いてるように見えるけど、転職は1回しかしてません!
最新記事
開発日誌2015.03.03q Text as Data
開発日誌2015.01.23ソケットでメールを送ってみよう
開発日誌2015.01.19CSSやJS等が更新してもキャッシュされてしまって困っちゃう!
開発日誌2015.01.16spl_autoload_registerでrequire_onceだらけのソースをスッキリさせましょう。