每隔一段时间,我就会收到类似 PDO 的错误:
错误!:SQLSTATE[HY093]:无效参数号:未定义参数
有什么方法可以得到更具体的错误,例如行号、文件名、缺少的参数等,而不是模糊的消息?
每隔一段时间,我就会收到类似 PDO 的错误:
错误!:SQLSTATE[HY093]:无效参数号:未定义参数
有什么方法可以得到更具体的错误,例如行号、文件名、缺少的参数等,而不是模糊的消息?
首先,确保您已将 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 一起使用,请确保禁用模拟的预准备语句。有关如何执行此操作以及为什么要执行此操作的更多信息,请参见此处。
您可以做的是注册一个全局错误处理程序和一个全局异常处理程序。这些函数接收文件名、行号和错误消息。在这些函数中,将数据回显到屏幕上并死掉。