Результат PHP odbc(), похоже, возвращает случайную неинициализированную память для полей varchar в версии 5.5+; идентичный код работает в версии 5.4
Я использую соединение ODBC для получения данных на сервере Windows. После обновления PHP с 5.4 до 5.6 (а также на 5.5) все поля varchar, похоже, возвращают случайную неинициализированную память, хотя длина строки совпадает с длиной запрашиваемого поля.
Например, запрос, возвращающий строку"Test.txt "в 5.4 возвращает следующее в 5.5+:
Я сравнил свои настройки 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);
}
1 answers
В есть несколько ошибокhttp://bugs.php.net , связанные с неинициализированными данными, появляющимися в результатах функции odbc. Они в основном предназначены для более старых (например, 5.3) версий php. Похоже, это то, что происходит в данном случае, или какой-то его вариант.
Переход на PDO в версии 5.6 полностью решил проблему для меня.