如何从PDO中挤出错误消息?

2022-08-30 09:40:06

我似乎无法从PDO获得任何错误消息:

#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
  $sth = $dbh->prepare('@$%T$!!!');
  print_r($sth);
  print_r($dbh->errorInfo());
} catch (PDOException $e) {
    echo $e->getMessage();
}

它只给出:

PDOStatement Object
(
    [queryString] => @$%T$!!!
)
Array
(
    [0] => 00000
    [1] =>
    [2] =>
)

setAttribute没有任何帮助。

这是 PHP 5.3.3 Apache 2.0 处理程序
PDO 驱动程序,适用于 MySQL 启用
的客户端 API 版本 mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $

如何获取错误信息?


答案 1

setAttribute 将导致 PDO 抛出错误或异常 - 这是执行查询时的最新情况。

对于模拟预准备语句,没有签入:prepare()

模拟的预准备语句不与数据库服务器通信,因此 PDO::p repare() 不检查该语句。

但是,当查询发送到服务器时,将有一个 in。execute()

但是,自mySQL 4.1以来,mySQL驱动程序支持本机预准备语句,因此这应该不适用。用

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

必须为您使用的查询导致异常。


答案 2

我也试图从数据库句柄级别获取信息,但我最终从语句级别获取信息errorInfo()PDOStatement::errorInfo()

每个 PHP 网站:

PDO::errorInfo() 仅检索直接在数据库句柄上执行的操作的错误信息。如果通过 PDO::p repare() 或 PDO::query() 创建 PDOStatement 对象,并在语句句柄上调用错误,则 PDO::errorInfo() 将不会反映语句句柄中的错误。必须调用 PDOStatement::errorInfo() 才能返回对特定语句句柄执行的操作的错误信息。


推荐