1
我有一个查询使用分页,今天早些时候工作,但现在正在返回一个提取失败。我检查了db2_num_rows()
,它给我-1。当我检查PHP文档时,db2_num_rows()
不应返回负值;它应该始终返回一个正值或false
。db2_num_rows()返回-1
有没有人有一个想法会导致它返回-1?由于db2_stmt_error()
和db2_stmt_errorMsg()
都返回空字符串,我希望这可以帮助我解决我的问题的根本原因。
这是我的脚本的缩写版本。当我使用strsql
与AS400控制台进行测试时,查询本身正常工作。
$minRow = 1;
$maxRow = 14;
$sql = 'SELECT * '
. 'FROM ('
. 'SELECT row_number() OVER (ORDER BY FETYPE) AS ID, '
. 'FETYPE, FECNO, FELC, FEID, FEDESC, FEBLEND, FECALC, '
. 'CAST(FECOST AS VARCHAR(12)) AS FECOST, '
. 'CAST(FEMARK AS VARCHAR(12)) AS FEMARK, '
. 'FEMKTP, '
. 'CAST(FESRNK AS VARCHAR(12)) AS FESRNK, '
. 'FEBSIZ, FEUDT, FEUTM, '
. 'FEMDT, FEUSID, FEINS1, FEMIXINS1, FEMIXINS2, FEMIXINS3, '
. 'FEVER, FEIMDT, FEANIMAL, '
. 'CAST(FERATE AS VARCHAR(7)) AS FERATE, '
. 'FETLA1, FETLA2, FETLA3, '
. 'FETLA4, FETLA5, FETLA6, FETLA7, FETLA8, FETLA9, FETLA10, '
. 'FESLNO, FESORV, FECMCD, FEMULTI, FEBRILLDT, FEFLUSH, '
. 'FEFLUSHQTY, '
. 'CAST(FECFEE AS VARCHAR(12)) AS FECFEE, '
. 'FECFTP, FEFILL, FEMIXTIME, FEPURPOSE, FEMEDS, '
. 'FEMEDTXT, FEDIRECT, FEMORTXT '
. 'FROM UFFRATH ' . $this->whereClause
. ') AS P '
. 'WHERE P.ID BETWEEN ? AND ?';
db2_bind_param($stmt, 1, 'minRow', DB2_PARAM_IN);
db2_bind_param($stmt, 2, 'maxRow', DB2_PARAM_IN);
$exec = db2_execute($stmt);
if ($exec) {
$this->log('num_rows = '. db2_num_rows($stmt), true); // writes 'num_rows = -1' to the log file
while ($row = db2_fetch_object($stmt)) { // throws db2_fetch_object(): Fetch Failure
array_push($data, $this->buildRation($row));
}
}
好的,谢谢。在我多年来使用的所有其他数据库管理系统之后,我从不会为IBM的愚蠢感到惊讶,因此我无法检索查询返回的行数而无需执行单独的查询(这会引入风险该COUNT()查询中的另一个错误)。 –