如何拦截数据库请求? (MySQL的)

时间:2011-02-04 13:17:46

标签: php mysql

我经常遇到以下情况;我正在研究一个用PHP构建的现有系统,它实际上做了很多事情,而且通常由很多代码组成。现在我必须扩展一些功能,调试一些东西,并且需要知道系统如何与MySQL-DB交互。哪些请求以什么顺序执行。

如何拦截所有查询?类似数据库的xdebug_start_trace。

编辑:没有集中处理数据库请求。你在那里找到各种要求。所以我的问题是针对某些日志记录功能。基本上应该存在,因为常识是这样的事情可能有用。

EDIT2:Mario建议的解决方案依赖于重启mysql-deamon ......没有办法。更多建议?

2 个答案:

答案 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或其他内容。