db2_fetch_assoc () не выполняется на полпути через итерацию по набору результатов

Я работаю на 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 меняется каждый раз, когда я его запускаю. Это почти похоже на то, что время и конец заканчиваются, прежде чем он сможет перебирать все результирующие наборы, но страница загружается за считанные секунды. Вне результатов, отсутствующих в результирующем наборе, все, кажется, функционирует и прекрасно загружается на странице.

Кто-нибудь знает, что может способствовать этому поведению?

    Related of "db2_fetch_assoc () не выполняется на полпути через итерацию по набору результатов"

    Возможно ли, что данные имеют ошибки? Одна из возможностей – это ошибки десятичных данных.

    @Buck Calabro заставил меня на правильном пути. Проблема заключалась не в ошибках десятичных данных, а скорее в подзапросе в определении представления, которое возвращало более 1 строки. Таким образом, это была ошибка «Результат выбора более чем одной строки».

    Если бы я сделал простой SELECT * FROM VIEW1 в iNavigator или PHP, все, казалось, получилось отлично. Только когда я либо запустил упомянутый запрос в 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 , чтобы гарантировать, что первая (и только) строка, возвращаемая, будет тем, что вы хотите.