2011-02-04 133 views
1

我经常面临以下情况;我正在开发一个以PHP为基础的现有系统,它实际上是相当多的,它通常由许多代码组成。现在我必须扩展一些功能,调试一些东西,并且需要知道系统如何与MySQL-DB交互。哪些请求按什么顺序执行。如何拦截DB请求? (MySQL)

如何截取所有查询?对于数据库来说就像xdebug_start_trace。

编辑:没有DB请求的集中处理。你可以在那里找到各种请求。所以我的问题是针对一些日志功能。基本上这应该存在,因为像这样的东西可能是有用的常识。

编辑2:马里奥建议的解决方案,这取决于重新启动mysql-deamon ...不能做。更多建议?

+0

是否有一个类可以处理所有的MySQL数据库连接? – 2011-02-04 13:19:15

+0

我怀疑它可以使用原始API函数在遗留代码上完成。 – 2011-02-04 13:25:43

+0

如果现有代码直接使用mysql_query(),则最后一个选项将尝试runkit_function_rename()并定义拦截所有调用的包装函数。或者更糟糕的选择:通过netcat | tee | netcat运行套接字或使用网络嗅探器。 – mario 2011-02-04 13:27:46

回答

1

如果您正在浏览PDO,可以将其扩展为记录或回显查询字符串。

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