在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 Failure和DB2 fetch failure error,但它们似乎无法解决我的情况。
答案 0 :(得分:0)
我找到了悲伤的原因。看来桌面函数内部使用了一个额外的库。由于该表函数在不同的库中具有依赖关系,并且其他库未包含在我的库列表中,因此返回给PHP的记录集为空。
它在i5终端上工作,因为我的终端会话已经设置为在其库列表中包含其他库,我不知道。
当我在连接中将其他内部库添加到我的库列表时,查询在PHP中工作就好了。
如果其他人遇到此问题,请确保包含查询使用的所有库,包括任何可能是内部依赖项的库。