Ich habe eine Abfrage, die Seitennummerierung verwendet, die früher gearbeitet hat, aber jetzt einen Abruffehler zurückgibt. Ich habe die db2_num_rows()
überprüft und es gibt mir -1. Wenn ich die PHP-Dokumentation überprüfe, sollte db2_num_rows()
niemals einen negativen Wert zurückgeben; es sollte immer einen positiven Wert oder false
zurückgeben.db2_num_rows() gibt -1 zurück
Hat jemand eine Idee, welche Bedingung es -1 zurückgeben würde? Da db2_stmt_error()
und db2_stmt_errorMsg()
beide leere Zeichenfolge zurückgeben, hoffe ich, dass dies mir helfen würde, die Ursache meines Problems zu beheben.
Hier ist eine verkürzte Version meines Skripts. Die Abfrage selbst funktioniert ordnungsgemäß, wenn ich mit der AS400-Konsole mit strsql
testen.
$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));
}
}
Ok, danke. Nach all den anderen DBMS, die ich im Laufe der Jahre verwendet habe, bin ich immer wieder erstaunt über die Dummheit von IBM, dass ich die Anzahl der von einer Abfrage zurückgegebenen Zeilen nicht ohne eine separate Abfrage abrufen kann (was das Risiko einführt) eines anderen Fehlers in der COUNT() - Abfrage). –