我正在使用PHP访问IBM i(AS400)上的DB2信息。
使用此代码:
$query = "SELECT * FROM QS36F.MYTABLE WHERE MYFIELD=120006";
$result = db2_prepare($conn, $query);
db2_execute($result);
$i=0;
while($row = db2_fetch_assoc($result) or die(db2_stmt_errormsg())){
$i++;
print "Row " . $i . " successful<br />";
}
我明白了:
SELECT * FROM QS36F.MYTABLE WHERE MYFIELD = 120006
第1行成功
第2行成功
第3排成功
第4行成功
数据转换或数据映射错误。 SQLCODE = -802
应该有超过4个结果。 为什么会发生这种错误?
更多详情:
答案 0 :(得分:3)
表中存在无效的十进制数据。有空白而不是零。我将零移动到那些空白中并修复了问题
答案 1 :(得分:2)
如果它可以帮助其他人,我会遇到同样的错误,并发现我在不匹配的数据类型之间进行加入:DECIMAL(2,0)
字段和VARCHAR(5)
字段。我们可以将VARCHAR
转换为DECIMAL(2,0)
它可以正常工作,否则会引发错误。
答案 2 :(得分:0)
根据文档,SQL0802是算术溢出。很可能其中一行的数据值对于您为其声明的php变量来说太大了,尽管我在您发布的代码中看不到它。或者还有一些其他有趣的数据转换没有正确发生,例如,如果QS36F.MYTABLE对象实际上是从另一个表中选择的视图,并且正在转换其中一个列。