php - 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 中的错误?
解决方案
PDOStatement::errorInfo 不可靠;在 PDO 选项中使用 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 对我有用。谢谢@YourCommonSense。
推荐阅读
- html - Bootstrap 4 .card 溢出时受父高度限制
- r - 分组并保留具有匹配模式的列
- flutter - 如何使用 Flutter 和 Dart 在后台监听 BLE 信号?
- c++ - 当从仿函数类模板参数推导出(衰减)类型时,完美转发失败。为什么?
- scala - Flink Streaming - 每天触发的 10 天事件时间窗口
- c++ - 使用 new[] 关键字时不允许不完整类型
- python - Python逐行读取并保持缩进
- automation - 在 sikulix 中,我如何制作一个 while 循环,条件是它在倒计时结束后不会重复?
- python - 如何使用 python 解析 xsd 并从中创建 XML?
- regex - 在 Google Data Studio 中提取最后一个 / 之后的字符串(REGEXP 问题)