db2_fetch_object():获取在查询在strsql中工作时抛出的失败

时间:2015-11-18 23:07:50

标签: php db2 db2-400

在PHP中运行查询时出现以下错误:

  

警告:db2_fetch_object():在第15行的...中获取失败

奇怪的是,当我使用// read to temp, then use operator bool() to get whether an error has occurred while(text_stream >> temp) { printf("%s ", temp); string_vec.push_back(temp); } 在我的I5终端中运行相同的查询时,它可以工作,并且我得到了一个很好的记录集。我运行的查询是res.write

res.write是一个驻留在U8库中的表函数,但是从用户的库中提取数据。当我使用IBM终端时,我使用strsql设置用户的库。该库在$ this-> user->库中的PHP DB2连接中指定(该库在其他查询中成功使用)。

这是PHP代码:

SELECT * FROM TABLE(U8.feedconst(0)) AS t1

日志显示在U8.feedconst(0)行之前一切正常:

uasetlibl

正如您所看到的,我尝试使用$this->conn = db2_connect( \HOST, $this->user->username, $this->user->password, array('i5_libl' => $this->user->library . ' ' . \PROD_LIB, 'i5_naming' => DB2_I5_NAMING_ON) ); $sql = 'SELECT * FROM TABLE(U8.feedconst(0)) AS t1'; $stmt = db2_prepare($this->conn, $sql); if ($stmt) { $this->user->log('stmt = ' . strval($stmt), true); $exec = db2_execute($stmt); if ($exec) { $this->user->log('exec = ' . strval($exec), true); $this->user->log('db2_stmt_errormsg = ' . db2_stmt_errormsg($stmt), true); while ($row = db2_fetch_object($stmt)) { $this->user->log($sql, true); } } } 从DB2中获取真正的错误,但它没有返回任何内容。

我查看了其他类似的问题,例如Warning: db2_fetch_assoc(): Fetch FailureDB2 fetch failure error,但它们似乎无法解决我的情况。

1 个答案:

答案 0 :(得分:0)

我找到了悲伤的原因。看来桌面函数内部使用了一个额外的库。由于该表函数在不同的库中具有依赖关系,并且其他库未包含在我的库列表中,因此返回给PHP的记录集为空。

它在i5终端上工作,因为我的终端会话已经设置为在其库列表中包含其他库,我不知道。

当我在连接中将其他内部库添加到我的库列表时,查询在PHP中工作就好了。

如果其他人遇到此问题,请确保包含查询使用的所有库,包括任何可能是内部依赖项的库。