2013-03-15 49 views
1

我正在通過php + linux ODBC使用遠程MSSQL庫。一切正常,但今天我寫的查詢與SET + PIVOT並得到了錯誤:結果中的MSSQL + ODBC + PHP = 0行

[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工作室直接在服務器上執行的相同查詢完美工作。 任何想法可以成爲一個問題? 謝謝。

UPDATE:
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之前和之後改變它ü所有的錯誤,如ANSI_NULLS去了,但我仍然有0行結果。 AnsiNPW=YESQuotedID=YES對我無能爲力。如果嘗試將版本更改爲8.0,則簡單查詢的結果爲??????????TDS_version=7.0odbc.ini也無能爲力。

我的查詢here。 我的連接字符串是:$conn=odbc_connect('sy_odbc','t','t');

更新2:
我的一些PHP頁面停止工作時,我已經改變TDS_version to 7.07.2,所以我將其返回到6.0。
建議的連接字符串不適用於我。完全一樣。 (我用我的比一年多了,這是罰款,這個問題之前)
Here的錯誤日誌問題查詢與6.0版本(在這裏我們有ANSI_NULLS等警告)
Here的錯誤日誌問題查詢版本7.0(沒有警告,但結果0行)

+0

[此問題](http://stackoverflow.com/questions/3416814/set-connection-settings-with-pyodbc-unixodbc-freetds)可能對您有所幫助。如果這不能解決你的問題,我建議在你的freetds.conf和/或你的odbc.ini中的「TDS_Version」值中更改'tds version'值。如果這些都不起作用,請使用完整的freetds.conf,odbcinst.ini,odbc.ini,您嘗試執行的SQL語句以及顯示如何連接到數據庫的代碼來更新您的問題。 – 2013-03-18 15:50:07

+0

@BennyHill感謝您的關注。我已更新我的帖子。 – 2013-03-19 08:45:40

+0

對不起Sergii,我不知道:-(我在TDS版本= 7.0的時候沒有看到錯誤信息,我假設你正在檢查你的'odbc_exec()'語句的返回值,它是not === FALSE?如果它返回FALSE,你應該執行'odbc_errormsg()'。 – 2013-03-20 19:02:40

回答

0

有兩件事我能想到的塞爾吉:

1)你的連接字符串。該manual說,您的連接字符串應該是這樣的:

$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文件的輸出(假設有錯誤信息在裏面)。

+0

我已經試過你的提議,請看結果更新。 – 2013-03-20 14:33:36