结果中MSSQL + ODBC + PHP = 0行

时间:2013-03-15 15:15:48

标签: php sql-server odbc pivot freetds

我通过php + linux ODBC使用远程MSSQL库。一切都很好,但今天我用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=YESQuotedID=YES对我无所作为。如果尝试在简单查询的结果中将版本更改为8.0,则??????????。 <{1}} TDS_version=7.0中的odbc.ini也无所作为。

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

更新2:
当我更改TDS_version to 7.07.2时,我的部分php页面停止工作,所以我将其恢复为6.0。 您提出的连接字符串对我不起作用。完全没有。 (我在使用我的时间超过了一年,在那个问题之前很好) Here是6.0版本问题查询的错误日志(此处我们有ANSI_NULLS等警告)
Here是7.0版本问题查询的错误日志(没有警告,但结果为0行)

1 个答案:

答案 0 :(得分:0)

我还能想到以下两件事:Sergii:

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文件的输出(假设其中有错误消息)。