Результат PHP odbc(), похоже, возвращает случайную неинициализированную память для полей varchar в версии 5.5+; идентичный код работает в версии 5.4


Я использую соединение ODBC для получения данных на сервере Windows. После обновления PHP с 5.4 до 5.6 (а также на 5.5) все поля varchar, похоже, возвращают случайную неинициализированную память, хотя длина строки совпадает с длиной запрашиваемого поля.

Например, запрос, возвращающий строку"Test.txt "в 5.4 возвращает следующее в 5.5+:

garbled

Я сравнил свои настройки php.ini между двумя версиями, и они кажутся идентичными в условия того, что конкретно относится к кодировкам и настройкам ODBC.

Я могу запустить обе версии параллельно на одном и том же ресурсе ODBC одновременно и получить эти результаты. Поля, не являющиеся переменными, такие как даты и целые числа, печатаются правильно. Я просто запускаю потокобезопасный исполняемый файл x86 php.exe, загруженный с http://windows.php.net/download для 5.4, 5.5 и 5.6.

Что еще я могу настроить, чтобы попытаться решить эту проблему?

Редактировать: Я использую Унифицированные функции ODBC, такие как:

$o = odbc_connect("Driver=MMODBC;Server=localhost;Database=odbc_mapping;", [user], [pass]);
$r = odbc_exec($o, "SELECT * FROM Table");
while (odbc_fetch_row($r)) {
    print odbc_result($r, 1);
}
Author: Machavity, 2016-06-10

1 answers

В есть несколько ошибокhttp://bugs.php.net , связанные с неинициализированными данными, появляющимися в результатах функции odbc. Они в основном предназначены для более старых (например, 5.3) версий php. Похоже, это то, что происходит в данном случае, или какой-то его вариант.

Переход на PDO в версии 5.6 полностью решил проблему для меня.

 5
Author: Charlie Schliesser, 2016-06-14 16:36:13