我正在使用PDO和OCI驱动程序。我的一个特定INSERT
查询导致触发错误:
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "FOO.BAR", line 5
ORA-04088: error during execution of trigger 'FOO.BAR'
但是,发生这种情况时不会抛出异常。我正在使用ERRMODE_EXCEPTION
,并且对于标准查询语法错误而言异常被抛出,但是对于源自触发器的任何错误,不。
在这种情况下,对$st->execute()
的调用也不会返回FALSE
。此外,$st->errorInfo()
和$st->errorCode()
也是无益的:
array(3) {
[0]=>
string(5) "00000"
[1]=>
NULL
[2]=>
NULL
}
string(5) "00000"
如何在发生触发错误时让PDO抛出异常?或者,如果这是不可能的,我如何通过其他方式以编程方式检测何时发生这种情况?我甚至知道首先发生错误的唯一方法(除了数据库没有更新)是$st->rowCount()
报告的0.但这本身并不是一种独特或可靠的方法来确定是否存在错误发生...
答案 0 :(得分:2)
这是不可能的。触发器(和事件)基于数据库操作在数据库上运行,并不直接与您的查询绑定 - 至少在PHP端看到。您的PDO查询是成功的,这是您的所有语句都知道的事实,根据您的语句对某些表所做的结果设置触发器的事实是无关紧要的。
您拥有的选项是: