2012-11-30 40 views
1

我正在使用PDO和OCI驱动程序。我特别INSERT查询导致触发错误:PDO异常不会引发触发错误

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

你能分享的PHP代码触发的错误? –

回答

2

这是不可能的。触发器(和事件)基于数据库操作在数据库上运行,并不直接绑定您的查询 - 至少在PHP一侧看到。你的PDO查询成功了,这就是你所有的陈述都知道的事实,即触发器被设置为根据你的语句对某个表执行的任何结果进行操作的事实是无关紧要的。

你的选项是:

  1. 写另一个查询,以确认一切的触发是应该做的
  2. 成功可能包住初始查询到运行查询,并验证了该的存储过程触发行动的成功。然后调用该存储过程,而不是直接运行查询。
+0

谢谢您确认我的怀疑。 – FtDRbwLXw6