Информация, которую я получаю из запроса, кажется неверной, я использую интерфейс odbc для запроса базы данных на AS400 с DB2.
Я использую отдельную программу для получения этой информации.Это пример запроса (правильный): выберите PPREMPBAN, PPRBCOBAN, PPRTDMBAN, PPRCHEBAN, (...) из таблицы, где PPREMPBAN = '1' и PPRBCOBAN = '12' и PPRTDMBAN = 'T' и PPRCHEBAN = '31457';
Результат:
В PHP я использую подготовленные операторы, а затем так: выберите PPREMPBAN, PPRBCOBAN, PPRTDMBAN, PPRCHEBAN, (...) из таблицы, где PPREMPBAN =?и PPRBCOBAN =?и PPRTDMBAN =?и PPRCHEBAN =?;
Код:
$prep = odbc_prepare($conn, self::DOCTO_POR_PAGO);
$result = odbc_execute($prep, array($pago->empresa, $pago->banco, $pago->tipoMov, $pago->noCheque));
[breakpoint to inspect] while($dataRow = odbc_fet_array($prep)){
...
}
Я использую xdebug для отладки php и получаю это:
Первая строка результата:
Вторая строка результата:
Третья строка результата:
Как вы видите, в первом результате показано, что поле "pprsecban", которое должно быть "2", равно "0", а in "Pprpromen "включает в себя" 2 "предыдущего поля и содержимое текущего поля, после этого данные других полей повреждены и одинаковы для следующих строк.
Я делал тесты и нашелследующее: Как я уже упоминал ранее, запрос, который я использую для получения информации, использует 4 параметра (?) В части где, если я изменяю один из этих параметров как константу непосредственно в запросе, то у меня нетэта проблема и информация, которая приносит мне, он делает это правильно.Это заставило меня подумать, что, возможно, это из-за переменных, которые я предпочел для функции "odbc_execute ()", но это не мой случай.
Также обратите внимание, что если я меняю позицию, поле "PPRSECBAN" перемещается назад или впередили любая другая эта проблема не появляется.Оригинал (выпуск): const DOCTO_POR_PAGO = 'выберите PPREMPBAN, PPRBCOBAN, PPRTDMBAN, PPRCHEBAN, PPRSECBAN , PPRPROMEN, (...) из таблицы, где PPREMPBAN =?и PPRBCOBAN =?и PPRTDMBAN =?и PPRCHEBAN =?';
Изменено (успешно): const DOCTO_POR_PAGO =' выберите PPREMPBAN, PPRBCOBAN, PPRTDMBAN, PPRSECBAN , PPRCHEBAN, PPRPROMEN, (...) из таблицы, где PPREMPBAN =?и PPRBCOBAN =?и PPRTDMBAN =?и PPRCHEBAN =?';
Пример правильных данных:
Первый ряд:
Второй ряд:
Какого черта это происходит?