php - 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 作为我的数据库)
解决方案
当您向 PDO 语句询问错误代码时,如果语句中有错误,它将返回该错误代码,如果没有,则将请求传递到下一个最高级别(即数据库连接)。甚至可能如果您直接询问连接,它会返回相同的内容。
在这种情况下,错误不在陈述中——这是一个完全有效的陈述,只是不符合当前的现实。考虑另一个准备好的语句,它添加了在 select 语句之前运行的 blah 列。
返回的是数据库连接上的最后一个错误,它只是通过一个不是导致问题的语句的语句返回。Buggy,我会同意你的,但你确实问过“为什么”。
推荐阅读
- r - 在 R 中构建日期时间列
- batch-file - 如何获得具有绝对路径但具有特定名称规则的列表?(批处理脚本)
- ruby - each_with_index 重复记录
- javascript - 如果 div 包含某些内容,则更改父 div 的 css
- python - 运行 VSCode nodebug 时,当前目录未添加到 sys.path
- forms - Symfony 形式的值对象约束
- mongodb - MongoTemplate 和/或 MongoRepository 是否支持 Mongo 4 事务?
- python - 如何使用 pandas 读取 .txt 数据列并提供给 TF
- spring - 使用 JAXB 编组 XML 元素内的属性
- javascript - 循环结果数组的最后一个索引