我在IBM i(AS / 400)V7R2,PHP v5.6.5,Zend Server v8.0.2上运行。
我有一个查询,从iNavigator执行只需不到一秒钟。当我从PHP脚本运行相同的查询,然后使用:
循环它$numRows = 0;
while ($row = db2_fetch_assoc($stmt))
{
//Do stuff
$numRows++;
}
echo $numRows++;
$numRows
最终只是预期结果集的一小部分,我在Zend日志中得到了这个错误:
PHP Warning: db2_fetch_assoc(): Fetch Failure in /path/to/script.php on line XXX
请注意,$ numRows的值每次运行时都会有所不同。它几乎就像是在它可以遍历所有结果集之前超时和结束,但是页面在几秒钟内加载。在结果集中缺少结果之外,一切似乎都在页面上运行并加载完美。
有谁知道可能导致这种行为的原因是什么?
答案 0 :(得分:2)
数据是否有错误?一种可能是十进制数据错误。
答案 1 :(得分:1)
如果我在iNavigator或PHP中做了一个简单的SELECT * FROM VIEW1
,那么一切似乎都很好。直到我在STRSQL
中运行提到的查询或手动运行视图定义,就好像它不是iNavigator中视图的一部分那样会报告错误。
为了帮助未来的用户,基本上就是发生了什么。
TABLEA
包含一个包含10行的列。
我写了一个这样的观点:
CREATE VIEW VIEWA (COL1, COL2, COL3)
AS SELECT 1, 2, (
SELECT * FROM TABLEA
);
子选择返回10行,数据库引擎不知道如何处理它。相反,如果您将FETCH FIRST 1 ROW ONLY
添加为子查询的一部分,则会修复错误。从逻辑上讲,你不会得到正确的结果,因为你可能需要第二行而不是第一行。其次,还建议您指定ORDER BY
和/或WHERE
子句,以确保返回的第一行(也是唯一的)行是您想要的。