使用MySQL调试PDO准备的查询

时间:2012-08-05 02:36:52

标签: php mysql debugging pdo

我正在进行从mysql_*调用到使用PDO调用的更改,并且在开发新代码时无法弄清楚如何调试我的实际SQL。

mysql_*调用下,我可以在PHP函数中编写一些SQL,并且可以echo实际的SQL来查看处理器正在使用的内容。

我无法在PDO库中找到这样的野兽。 debugDumpParams看起来应该如此,但它不会吐回绑定的声明。

我遇到的问题的例子:

  1. 在我的第一次尝试中,我绑定了一个字符串并在SQL语句中包含了引号,尽管绑定了一个data_type的字符串 - 它只是通过fluke我尝试从语句中删除引号;调试会让我看到那里有一个重复的引用。

  2. 我将一些代码从一个项目复制到另一个项目,并意外忘记更正数据库名称。当然,SQL失败了,因为其他数据库中不存在这些表。但该程序刚刚返回了正确的错误结果。在PHP日志或MySQL日志中没有任何地方或任何地方,我得到一个提示,表格不存在于我寻找的地方。

  3. 那么,其他人如何为PDO SQL调用进行调试?我错过了什么? :)

1 个答案:

答案 0 :(得分:4)

对于第一个问题,检查查询确实很困难。除了在数据库服务器上记录查询之外,您无法做很多事情。原因是准备好的查询不是(总是)简单地将数据连接到查询中。重点是数据与查询分开发送。您可以通过$yourStatement->queryString访问查询字符串。它只会显示带有参数的查询。

对于第二个问题,默认情况下,PDO在发生错误时不会抛出异常。由你来检查它们。你可以改变这个。 http://php.net/manual/en/pdo.error-handling.php

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后,您可以通过查询执行的try / catch块来捕获问题。