PHP odbc искажает информацию, полученную из запроса - PullRequest
0 голосов
/ 20 ноября 2018

Информация, которую я получаю из запроса, кажется неверной, я использую интерфейс odbc для запроса базы данных на AS400 с DB2.

Я использую отдельную программу для получения этой информации.Это пример запроса (правильный): выберите PPREMPBAN, PPRBCOBAN, PPRTDMBAN, PPRCHEBAN, (...) из таблицы, где PPREMPBAN = '1' и PPRBCOBAN = '12' и PPRTDMBAN = 'T' и PPRCHEBAN = '31457';

Результат: enter image description here

В 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 и получаю это:

Первая строка результата:

enter image description here

Вторая строка результата:

enter image description here

Третья строка результата:

enter image description here

Как вы видите, в первом результате показано, что поле "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 =?';

Пример правильных данных:

Первый ряд:

enter image description here

Второй ряд:

enter image description here

Какого черта это происходит?

...