首页 > 解决方案 > PDOStatement 的 errorInfo 不会跨查询重置

问题描述

PDOStatement::errorInfo() 在同一个 PDO 中通过多个查询保持不变。

        try
        {
            $oReq = $this->_oPDO->prepare($sSqlQuery);
            $oReq->execute($aBindParams);
            $mRes = $oReq->fetchAll();

            if (!empty($oReq->errorInfo()[2])) // specific driver error
                throw new \PDOException($oReq->errorInfo()[2], $oReq->errorInfo()[0]);

            return $mRes;
        } catch (\PDOException $e)
        {
        }

这是我们将调用执行的方法中的代码,在一个类中初始化其构造中的 PDO ($this->_PDO)。如果我执行了 2 次,第一次失败并抛出错误,即使第二次请求是好的,它也会失败并抛出相同的错误,因为 errorInfo() 仍然有错误以前的请求。

该文档指出 PDOStatement::errorInfo() (此处为 $oReq->errorInfo())应该给出当前语句的错误。但似乎如果没有错误,它就会留下来。如果有新的错误 if 将覆盖当前错误。

例如,我测试了以下内容:Good req 1,bad req 1,bad req 2,good req 2 = 好 req 2 失败,错误 req 2 错误。

当我找到一个 PDOStatement 错误时,我应该做些什么来重置 PDOStatement 的错误,或者这是我做的不好的事情,或者 PDO 中的错误?

标签: phppostgresqlpdo

解决方案


PDOStatement::errorInfo 不可靠;在 PDO 选项中使用 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 对我有用。谢谢@YourCommonSense。


推荐阅读