捕获db2_prepare生成的警告

时间:2012-01-26 18:12:03

标签: php db2

我的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的脚本,但是我没有返回脚本的输出,这就是我从未看到错误的原因。

对我来说,这似乎仍然有些问题,但我没有时间进一步追求它。

1 个答案:

答案 0 :(得分:1)

检查返回时,您可能希望比较SQLSTATE而不是准备是否返回了成功的资源。

您可以使用db2_stmt_error()在PHP中检索SQLSTATE,它将为您提供上次执行的SQL状态(如果您传递特定资源,则该资源上的最后一次执行)。我相信你想从PREPARE返回的唯一SQLSTATE是00000,这是成功执行的代码。

如果您想输出人类可读的SQL错误消息,可以使用db2_stmt_errormsg(),它将输出SQLSTATE和相应的错误消息字符串。