我经常遇到以下情况;我正在研究一个用PHP构建的现有系统,它实际上做了很多事情,而且通常由很多代码组成。现在我必须扩展一些功能,调试一些东西,并且需要知道系统如何与MySQL-DB交互。哪些请求以什么顺序执行。
如何拦截所有查询?类似数据库的xdebug_start_trace。
编辑:没有集中处理数据库请求。你在那里找到各种要求。所以我的问题是针对某些日志记录功能。基本上应该存在,因为常识是这样的事情可能有用。
EDIT2:Mario建议的解决方案依赖于重启mysql-deamon ......没有办法。更多建议?
答案 0 :(得分:2)
您可以首先使用mysqld
参数启动--log=fn
来使用MySQL“常规查询日志”。
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
答案 1 :(得分:1)
如果您正在浏览PDO,可以将其扩展为log或echo查询字符串。
<?php
class PDODebug extends PDO
{
public function exec ($statement)
{
var_dump ($statement); // Or log to a file or use firePHP to log to the console
return (parent::exec ($statement));
}
public function query ($statement)
{
var_dump ($statement); // Or log to a file or use firePHP to log to the console
return (parent::query ($statement));
}
}
?>
现在,在您的代码中创建一个新的PDODebug,您将在其中创建一个PDO,并将记录通过它执行的查询。如果您使用的是不同的OO数据库接口(如MySQLI),您应该可以执行类似的操作。
如果您正在使用非OO数据库访问层(如mysql_ *函数),则需要在每次使用mysql函数之前插入echo或var_dump或其他内容。