首页 > 解决方案 > PDO 从特定语句中获取错误

问题描述

来自文档

您必须调用 PDOStatement::errorInfo()来返回对特定语句句柄执行的操作的错误信息。

好的,现在我有:

    $sth1 = $db_conn->prepare( "SELECT bla" );
    $sth1->execute();

    $sth2 = $db_conn->prepare( "SELECT 1" );
    $sth2->execute();

然后$sth2->errorInfo()[2]给出错误:string(71) "ERROR: column "bla" does not exist

正如我从文档的引用中了解到的那样,对于特定的陈述$sth2,根本不应该有错误。但是为什么它会返回错误$sth1呢?我有什么误解?

PS(我使用 postgres 作为我的数据库)

标签: phppostgresqlpdo

解决方案


当您向 PDO 语句询问错误代码时,如果语句中有错误,它将返回该错误代码,如果没有,则将请求传递到下一个最高级别(即数据库连接)。甚至可能如果您直接询问连接,它会返回相同的内容。

在这种情况下,错误不在陈述中——这是一个完全有效的陈述,只是不符合当前的现实。考虑另一个准备好的语句,它添加了在 select 语句之前运行的 blah 列。

返回的是数据库连接上的最后一个错误,它只是通过一个不是导致问题的语句的语句返回。Buggy,我会同意你的,但你确实问过“为什么”。


推荐阅读