У меня есть проект PHP, работающий на моем Gentoo Linux, который использует FreeTDS & UnixODBC для подключения к базе данных MSSQL на сервере Windows. У меня был этот проект, работающий с этим точным кодом уже много лет, но недавно мне пришлось обновлять PHP, когда Gentoo больше не имел ebuild версии 5.3 в portage и других системных обновлениях.Контекст типа ODBC_CONNECT конфликтует с SQLGetData в PHP с помощью freeTDS и unixODBC
текущей версии различного программного обеспечения используется в:
PHP является версией 5.6.17
FreeTDS является версией 0,91
UnixODBC является версия 2.3.2-r1
Но теперь некоторые из те же самые запросы, которые отлично работают, возвращают эту ошибку.
PHP Warning: odbc_fetch_object(): SQL error: [unixODBC][Driver Manager]SQLGetData is not allowed on a forward only (non-buffered) cursor, SQL state SL008 in SQLGetData in /home/XXXXX/XXXX.php on line Y
Не все запросы возвращают эту ошибку, только некоторые, но одни и те же запросы последовательно возвращают ту же ошибку.
Простой PHP программа, которая будет возвращать эту ошибку следующим образом:
$con = odbc_connect(DBNAME,UNAME,PW,SQL_CUR_USE_ODBC)
$query = "SELECT * FROM SomeTable"
$Output = odbc_exec($con,$query);
$return_array = array();
while($row = odbc_fetch_object($Output)){
#
foreach($row as &$value){
$value = mb_convert_encoding($value, "UTF-8", "Windows-1252");
}
unset($value);
$return_array[] = $row;
}
echo json_encode($return_array,JSON_UNESCAPED_UNICODE);
odbc_close($con);
?>
Теперь это, безусловно, связано с 4-го параметра, подаваемого odbc_connect при использовании SQL_CUR_USE_ODBC, ошибка, как я сказал, выше. При этом изменяется на SQL_CUR_USE_IF_NEEDED возвращает ошибку:
Warning: odbc_fetch_object(): No tuples available at this result index in /home/XXXXX/XXXX.php on line Y []
С одинаковым результатом в течение SQL_CUR_USE_DRIVER, или если он остается пустым.
Опять же, два дня назад это был весь функциональный код по всем запросам. Так что что-то изменилось с PHP 5.3 на любую версию php> 5.3. Каждая версия PHP была проверена с 5.4 до 7.0 (в portage есть ebuild PHP 7), и все они вызывают те же ошибки.
Любая помощь или направление в этом вопросе были бы весьма полезными.
Я знаю, что это год, но я вижу то же самое с очень похожей конфигурацией, и заметил, что только когда выбран текстовый тип данных, и данные все еще выбраны, но есть php WARNING для каждый вызов 'odbc_result' в столбце« Тип данных ». Вы когда-нибудь находили более постоянное решение для предупреждений? –
Я на самом деле никогда особо не делал. Я как бы забыл об этом вопросе честно. Я чувствую, что я должен был просто переключить версии PHP! Но я приветствую всех, кто знает, что происходит с этим, давая понять всем остальным! – dynamphorous