PHP + ODBC + FreeTDS + MSSQL:无法更改TDS版本

时间:2016-01-19 23:01:36

标签: php sql-server odbc freetds

我已经设置了PHP / ODBC / FreeTDS来将我的Ubuntu主机连接到远程MSSQL实例,这在技术上是有效的。我可以很好地执行简单的查询。但是,我不能使用准备好的陈述;产生以下错误:

  

警告:odbc_execute():SQL错误:[unixODBC] [Driver Manager]驱动程序   不支持此功能,SQL状态IM001中   SQLDescribeParameter ...

我猜这是因为正在使用早期的TDS版本(4.2),它不支持预处理语句和其他东西。麻烦的是,我似乎无法改变正在使用的TDS版本!我已经尝试了所有可以想到的配置......

运行tsql -C会产生:

Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /etc/freetds
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 4.2
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes

注意“TDS version: 4.2”,尽管有以下配置。

ODBC.INI

[db_dsn]
Driver      = FreeTDS
Servername  = mssql_server
Database    = my_database
Description = My MSSQL database.
Trace       = No

ODBCINST.INI

[FreeTDS]
Description     = TDS connection
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount      = 1
FileUsage       = 1

freetds.conf

[global]
    tds version = 7.2
    text size = 64512

[mssql_server]
    host = <IP>
    port = 1433
    tds version = 7.2

PHP

$connection = odbc_connect('db_dsn', $username, $password);
$statement = odbc_prepare($connection, "INSERT INTO my_table (col1, col2) VALUES (? ?)");
$exec = odbc_execute($statement, array($val1, $val2));

我尝试设置TDSVER环境变量并运行tsql -C --with-tdsver=7.0,但没有效果(甚至在tsql -C输出中也没有)。我还尝试在TDS_Version中为DSN指定匹配的odbc.ini,并在Server而不是Port中使用odbc.iniServername来声明该内容在freetds.conf

这些更改似乎都没有改变我上面提到的报告的TDS版本或导致的SQL错误。我确信我正在freetds.conf编辑正确的/etc/freetds文件,我知道我的DSN有效,因为我可以执行简单的SELECT语句等。

谁能告诉我我在俯瞰什么或者我在这里缺少什么?我确定这是一件小事,但我看不到它。

编辑#1: 已将配置的TDS版本从7.0更改为7.2。

编辑#2: 根据Flipper的评论,我将重复的PortTDS_Version信息添加到我的odbc.ini DSN以及freetds.conf(无更改):

[db_dsn]
Driver      = FreeTDS
Servername  = mssql_server
Port        = 1433
TDS_Version = 7.2
Database    = my_database
Description = My MSSQL database.
Trace       = No

0 个答案:

没有答案