MSSQL+ODBC+PHP = 0 строк в результате
Я использую удаленную базу MSSQL через php + linux ODBC. Все было хорошо, но сегодня я написал запрос с SET
+ PIVOT
и получил ошибку:
[unixODBC][FreeTDS][SQL Server]SELECT failed because the following SET options have
incorrect settings: 'ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL,
ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views
and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or
XML data type methods and/or spatial index operations.
Я пытался написать SET ANSI_NULLS ON
и т.д., но это не работает, в результате есть 0 полей. Тот же запрос, выполненный непосредственно на сервере через MSSQL studio, работает отлично. Есть идеи, где могут быть проблемы? Благодарю.
ОБНОВИТЬ:
freetds.conf
[syserver]
host =192.168.1.200
port = 1433
tds version = 7.0
AnsiNPW=YES
QuotedID=YES
odbc.ini
[sy_odbc]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = syserver
Database = Insy
odbcinst.ini
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
До того как я got tds version=6.0
и после изменения до 7.0 все ошибки такие ANSI_NULLS
ушел, но у меня все еще есть 0 строк в результате. AnsiNPW=YES
а также QuotedID=YES
ничего не делай для меня. Если попытаться изменить версию на 8.0 в результате простого запроса, у меня есть ??????????
, TDS_version=7.0
в odbc.ini
тоже ничего не делаю.
Мой запрос здесь. И моя строка подключения: $conn=odbc_connect('sy_odbc','t','t');
Обновление 2:
Некоторые из моих страниц php перестают работать, когда я изменился TDS_version to 7.0
или же 7.2
так что я возвращаю его обратно в 6.0.
Строка подключения, как вы предложили, не работает для меня. Совсем. (Я использую мой более года, и это было хорошо, до этого вопроса)
Вот журнал ошибок для проблемного запроса с версией 6.0 (здесь мы имеем ANSI_NULLS
и т.д. предупреждения)
Вот журнал ошибок для проблемного запроса с версией 7.0 (Предупреждений нет, но в результате 0 строк)
1 ответ
Есть еще две вещи, которые я могу вспомнить о Сергии:
1) Ваша строка подключения. В руководстве сказано, что ваша строка подключения должна выглядеть так:
$conn = odbc_connect('Driver={sy_odbc};Server=192.168.1.200;Database=Insy', $username, $password);
Поэтому сначала я попробую и посмотрю, поможет ли это.
2) Каждый раз, когда у вас возникают проблемы с подключениями ODBC, вы должны включить ведение журнала, чтобы вы могли перехватывать сообщения об ошибках. Для этого добавьте следующие строки в ваш файл /etc/odbcinst.ini:
[ODBC]
Trace = yes
TraceFile = /tmp/odbc.log
Если ваш запрос все еще не работает, отредактируйте ваш вопрос и добавьте вывод из файла odbc.log (при условии, что в нем есть сообщения об ошибках).