3

每隔一段时间,我就会收到类似 PDO 的错误:

错误!:SQLSTATE[HY093]:无效参数号:未定义参数

有什么方法可以得到更具体的错误,例如行号、文件名、缺少的参数等,而不是模糊的消息?

4

2 回答 2

5

首先,确保您已将 PDO 设置为在错误时引发异常:

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

现在,确保每个 PDO 操作/操作集都包含在try/catch块中,如下所示:

try {

  $stmt = $pdo->prepare("SELECT * FROM Whatever");
  // ...yada yada yada, your PDO code goes here

} catch (PDOException $e) {

  // This will echo the error message along with the file/line no on which the
  // exception was thrown. You could e.g. log the string to a file instead.
  echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine();

}

所有异常都从基Exception类扩展,因此继承它的方法和它携带的有关错误的信息。

附带说明,如果将 PDO 与 MySQL 一起使用,请确保禁用模拟的预准备语句。有关如何执行此操作以及为什么要执行此操作的更多信息,请参见此处。

于 2012-09-19T22:29:47.387 回答
1

您可以做的是注册一个全局错误处理程序和一个全局异常处理程序。这些函数接收文件名、行号和错误消息。在这些函数中,将数据回显到屏幕上并死掉。

于 2012-09-19T22:09:47.083 回答