我正在进行从mysql_*
调用到使用PDO调用的更改,并且在开发新代码时无法弄清楚如何调试我的实际SQL。
在mysql_*
调用下,我可以在PHP函数中编写一些SQL,并且可以echo
实际的SQL来查看处理器正在使用的内容。
我无法在PDO库中找到这样的野兽。 debugDumpParams
看起来应该如此,但它不会吐回绑定的声明。
我遇到的问题的例子:
在我的第一次尝试中,我绑定了一个字符串并在SQL语句中包含了引号,尽管绑定了一个data_type的字符串 - 它只是通过fluke我尝试从语句中删除引号;调试会让我看到那里有一个重复的引用。
我将一些代码从一个项目复制到另一个项目,并意外忘记更正数据库名称。当然,SQL失败了,因为其他数据库中不存在这些表。但该程序刚刚返回了正确的错误结果。在PHP日志或MySQL日志中没有任何地方或任何地方,我得到一个提示,表格不存在于我寻找的地方。
那么,其他人如何为PDO SQL调用进行调试?我错过了什么? :)
答案 0 :(得分:4)
对于第一个问题,检查查询确实很困难。除了在数据库服务器上记录查询之外,您无法做很多事情。原因是准备好的查询不是(总是)简单地将数据连接到查询中。重点是数据与查询分开发送。您可以通过$yourStatement->queryString
访问查询字符串。它只会显示带有参数的查询。
对于第二个问题,默认情况下,PDO在发生错误时不会抛出异常。由你来检查它们。你可以改变这个。 http://php.net/manual/en/pdo.error-handling.php
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后,您可以通过查询执行的try / catch块来捕获问题。