6

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

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

我一直无法在 PDO 库中找到这样的野兽。debugDumpParams看起来应该,但它不会吐回绑定语句。

我遇到的问题示例:

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

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

那么,其他人是如何调试 PDO SQL 调用的呢?我错过了什么?:)

4

1 回答 1

4

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

对于您的第二个问题,默认情况下 PDO 在发生错误时不会引发异常。由您来检查它们。不过,您可以更改此设置。 http://php.net/manual/en/pdo.error-handling.php

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

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

于 2012-08-05T02:43:30.993 回答