我的DB2类有一个prepare函数:
public function prepare()
{
if (FALSE === ($this->stmt = db2_prepare($this->conn, $this->sql)))
{
throw new Exception($this->get_error());
}
return $this;
}
一些神秘的查询在php错误日志中引发警告:
[26-Jan-2012 11:17:32] PHP Warning: db2_prepare(): Statement Prepare Failed in /<path to file>/Db2.php on line 178
db2_prepare未返回FALSE。否则,会抛出异常,我会得到一个回溯。
我是否正在测试db2_prepare的返回值以捕获合法错误/警告,或者db2_prepare是否有错误?
这是在i5 / iseries / as400上的Zend Server堆栈上运行。
这种情况下的解决方法是try catch块,它会生成警告异常。不知道这会怎么样,这听起来像是另一个帖子给我。
此外,@不是一个选项。它出于某种原因产生警告。我宁愿不把头埋在沙子里。
更新: 我终于找到了查询。这是一个糟糕的插入声明。即使准备失败并生成错误,也会返回有效的语句资源,并且脚本继续生成异常。我使用exec来调用包含错误INSERT的脚本,但是我没有返回脚本的输出,这就是我从未看到错误的原因。
对我来说,这似乎仍然有些问题,但我没有时间进一步追求它。
答案 0 :(得分:1)
检查返回时,您可能希望比较SQLSTATE而不是准备是否返回了成功的资源。
您可以使用db2_stmt_error()
在PHP中检索SQLSTATE,它将为您提供上次执行的SQL状态(如果您传递特定资源,则该资源上的最后一次执行)。我相信你想从PREPARE
返回的唯一SQLSTATE是00000
,这是成功执行的代码。
如果您想输出人类可读的SQL错误消息,可以使用db2_stmt_errormsg()
,它将输出SQLSTATE和相应的错误消息字符串。