php zend框架日志mysql查询

时间:2011-09-06 15:04:11

标签: php mysql zend-framework

我正在尝试在脚本运行时记录sql查询。我正在使用zend框架,我已经检查过zend db profiler,这没用,因为这显示“?”对于插入查询中的值..我需要实际值本身,以便我可以将其记录在文件中。我使用getAdapter() - >更新查询的更新方法,所以我不知道是否有办法获取查询并记录它。如果有办法记录查询,请告诉我。

问候

3 个答案:

答案 0 :(得分:5)

来自http://framework.zend.com/manual/en/zend.db.profiler.html

  

getLastQueryProfile()的返回值和getQueryProfiles()的各个元素都是Zend_Db_Profiler_Query个对象,它们可以自行检查各个查询:

     
      
  • getQuery() 会返回查询的SQL文本。带参数的预准备语句的SQL文本是编写查询时的文本,因此它包含参数占位符,而不是执行语句时使用的值。

  •   
  • getQueryParams() 返回执行准备好的查询时使用的参数值数组。这包括绑定参数和语句的execute()方法的参数。数组的键是位置(从1开始)或命名(字符串)参数索引。

  •   

使用Zend_Db_Profiler_Firebug时,它还会显示Firebug控制台中返回页面上的查询以及任何绑定参数。

答案 1 :(得分:3)

我知道你的答案虽然仅供参考...... 我已遍历了数百页,谷歌搜索了很多,但我还没有找到任何确切的解决方案。 最后这对我有用。无论您在控制器或型号中的哪个位置。这段代码适用于我的每一个地方。只需使用此

//Before executing your query
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->getProfiler()->setEnabled(true);
$profiler = $db->getProfiler();

// Execute your any of database query here like select, update, insert
//The code below must be after query execution
$query  = $profiler->getLastQueryProfile();
$params = $query->getQueryParams();
$querystr  = $query->getQuery();

foreach ($params as $par) {
    $querystr = preg_replace('/\\?/', "'" . $par . "'", $querystr, 1);
}
echo $querystr;

最后这件事对我有用。

答案 2 :(得分:1)

MySQL保留了一些日志。

最值得注意的是:

二进制日志(所有查询)
慢查询日志(执行时间超过x时间的查询)

请参阅:http://dev.mysql.com/doc/refman/5.0/en/server-logs.html