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

You*_*nse 59 php error-handling pdo

我似乎无法从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();
}
Run Code Online (Sandbox Code Playgroud)

它只给出:

PDOStatement Object
(
    [queryString] => @$%T$!!!
)
Array
(
    [0] => 00000
    [1] =>
    [2] =>
)
Run Code Online (Sandbox Code Playgroud)

setAttribute没有任何帮助.

这是PHP 5.3.3
支持MySQL的Apache 2.0 Handler PDO驱动程序
客户端API版本mysqlnd 5.0.7-dev - 091210 - $ Revision:300533 $

我该怎么做才能获得错误信息?

Pek*_*ica 65

setAttribute 导致PDO抛出错误或异常 - 执行查询时的最新错误或异常.

对于模拟准备好的陈述,没有签到prepare():

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

但是execute()当查询被发送到服务器时会有一个.

但是,mySQL驱动程序支持自mySQL 4.1以来的本机预处理语句,所以这不适用.运用

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
Run Code Online (Sandbox Code Playgroud)

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

  • @Col如果设置`$ dbh-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION)会怎么样?`? (2认同)

CIN*_*PPS 5

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

每个 PHP 网站:

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


sha*_*mar 3

您需要先execute查询,然后检查错误:所以这样做:

 $sth->execute();
Run Code Online (Sandbox Code Playgroud)

然后检查是否有错误。然后你会得到错误(如果有的话)。