人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHPで質問です。
公開サイトの為、デバックのレベルは非表示にしたいのですが
SQLのアクセスログを取りたいため、実行したSQL文をPHP上で取得したく思います。
どの様な手法が良いでしょうか?

●質問者: makocan
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● oil999
●67ポイント

以下の通りです。

$this->Model->query(SQL文);

http://book.cakephp.org/1.3/ja/view/1027/query


makocanさんのコメント
申し訳ございません。 SQLを発行している箇所が膨大のため 一つ一つのSQL発行時に処理を入れるのではなく、beforeRender内などに 実行SQLを保存する処理を入れたのです。

oil999さんのコメント
「実行SQLを保存する処理」というのはどういう意味でしょうか? トランザクション処理を行いたいということでしょうか。 具体的なコードでお示しください。

makocanさんのコメント
わかりづらくて、申し訳ございません。 その他の回答いただいたのがやりたいものには近いのですが、デバックモードが0の状態で、ファイルに保持したく思います。

2 ● cooper0524
●67ポイント

【サムライエンジン】CakePHP-sqlのログをファイルに取得
MySQLの場合ですが、これでいかがでしょう?
いくつか調べた中でも簡単です。

もしかすると上記は公開サイト上にも出てきてしまう恐れがあるので、その場合は
http://www.1x1.jp/blog/2007/04/cakephp_sql_log.html
こちらのほうが良いかもしれません。


makocanさんのコメント
やりたいこととしてはピンポイントですが、これは、、デバックのレベルが2以上ではないとダメではないでしょうか?

3 ● 蝸牛角上争何事
●66ポイント

以下のように変更を加えることでSQLを任意のファイルに吐き出すことができます。

■app/config/database.php

class DATABASE_CONFIG {
 var $default = array(
 'driver' => 'mysql_with_log', // ここを変更してください
 // ...
 )
} 

■cake/libs/model/datasources/dbo/mysql_with_log.php ※新規に作成する

<?php

require (LIBS . 'file.php');
require (LIBS . 'model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_mysql.php');

class DboMysqlWithLog extends DboMysql {
 function _execute($sql) {
 // ログを残す処理になります
 $filename = ...; // SQLを出力したいファイル名を設定します
 $log = new File($filename, true);
 $message = date('Y-m-d H:i:s') . ' SQL: ' . $sql . "\n";
 $log->append($message);

 // 本来の処理を呼び出します
 return parent::_execute($sql);
 }
}

?>

回答を作成するにあたって以下のページを参考に致しました。
http://cakephp.1045679.n5.nabble.com/Log-SQL-queries-td1281970.html
http://stackoverflow.com/questions/4721052/how-to-log-sql-queries-to-a-log-file-with-cakephp
http://api.cakephp.org/view_source/file-log/

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ