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