У меня есть запрос, который использует разбиение на страницы, который работал ранее сегодня, но теперь возвращает ошибку выборки. Я проверил db2_num_rows()
и это дает мне -1. Когда я проверяю документацию PHP, db2_num_rows()
никогда не должен возвращать отрицательное значение; он всегда должен возвращать положительное значение или false
,
У кого-нибудь есть идея, какое условие заставит его вернуть -1? поскольку db2_stmt_error()
а также db2_stmt_errorMsg()
оба возвращают пустую строку, я надеюсь, что это поможет мне устранить причину моей проблемы.
Вот сокращенная версия моего сценария. Сам запрос работает правильно, когда я тестирую с помощью консоли AS400, используя strsql
,
$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));
}
}
Вы пытаетесь использовать db2_num_rows
определить количество найденных строк.
Вы запускаете эту функцию после выполнения select
,
PHP документация говорит:
Возвращает количество строк, удаленных, вставленных или обновленных SQL
заявление.
Это также говорит:
Чтобы определить количество строк, которые будут возвращены с помощью SELECT
оператор, введите SELECT COUNT (*) с теми же предикатами, что и ваш
предназначен оператор SELECT и получить значение.
Резюме
Я согласен, странно, что документация PHP ничего не говорит об отрицательной ценности.
Но он говорит, что вы не можете использовать эту функцию, чтобы определить количество строк, найденных вашим select
запрос. Ваша ошибка — типичная ошибка использования.
Других решений пока нет …