PDO errorinfo不返回信息

时间:2013-07-09 14:58:24

标签: php pdo

我有代码:

$stmt = $db->prepare(" bla bla ");
$stmt->execute();
print_r($db->errorInfo());

返回:Array ( [0] => 00000 [1] => [2] => )

为什么不返回错误信息?

2 个答案:

答案 0 :(得分:5)

以下报告错误:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

if (($stmt = $dbh->prepare(" bla bla ")) === false) {
    print_r($dbh->errorInfo());
}

if ($stmt->execute() === false) {
    print_r($stmt->errorInfo());
}

注意在上面针对prepare()报告$dbh期间导致的解析错误。即使prepare()成功,但execute()可能会导致错误,但会针对$stmt报告该错误。

在上面的测试中,我在prepare()

之后立即收到了错误报告
Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; 
           check the manual that corresponds to your MySQL server version for the right 
           syntax to use near 'bla bla' at line 1
)

但是,如果您使用模拟准备,则此行为会发生变化。

启用该属性后,prepare()实际上是无操作。它只是将查询字符串保存在$ stmt中,然后语句的实际准备被延迟,直到您调用execute()。因此,对$stmt报告错误(无论是否在准备时或执行时发生)。

我测试过如下更改错误报告行:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

// prepare won't report SQL errors, it's virtually a no-op.
if (($stmt = $dbh->prepare(" bla bla ")) === false) {
    print_r($dbh->errorInfo());
}

// execute will report errors of parsing or execution.
if ($stmt->execute() === false) {
    print_r($stmt->errorInfo());
}

在这种情况下,prepare()未报告错误,但我在execute()收到了与上述相同的错误。同样,您必须检查$stmt以获取execute()之后的错误。

答案 1 :(得分:-1)

SQLSTATE 00000表示“成功”。根据{{​​3}}:

  

如果未设置SQLSTATE错误代码或没有特定于驱动程序的错误,则元素0后面的元素将设置为NULL。