PDO_ODBC和unixODBC无法将MSSQL与非默认端口连接

时间:2014-12-16 10:46:30

标签: sql-server port unixodbc pdo-odbc

我必须在php / linux环境中连接两个MSSQL服务器。所以我决定使用unixODBC和PDO_ODBC。

  • server1上的mssql: 10.10.10.5:1433

  • 服务器2上的mssql: 10.10.10.8:14233 (非默认端口号)

我认为PDO_ODBC或unixODBC存在端口问题。我在下面尝试了一些代码。

此代码工作正常。连接成功。

$db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.5; Port=1433; Database=dbname; UID=uid; PWD=pwd');

此代码无效。连接失败。

$db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.8; Port=14233; Database=dbname; UID=uid; PWD=pwd');

奇怪的是,这段代码也适用于错误的值。 :(

$db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.5; Port=14233; Database=dbname; UID=uid; PWD=pwd');

我得出结论,有人忽略PDO的dsn上的端口设置。

我还尝试使用/etc/odbc.ini

进行其他设置
[odbc-erp]
Driver=SQL Server Native Client 11.0
Description=MSSQL
Trace=Yes
Server=10.10.10.8
Port=14233
Database=dbname

并且,此代码没有建立连接。

$dbh = new PDO('odbc:odbc-erp', $uid, $pwd);

错误讯息:

DB Error: SQLSTATE[HYT00] SQLConnect: 0 [unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired in /home/user/public_html/test/testodbc.php on line 40

并且,此代码工作正常。

[odbc-mes]
Driver=SQL Server Native Client 11.0
Description=MSSQL
Trace=Yes
Server=10.10.10.5
Port=14233              // Wrong value (10.10.10.5 server port is 1433.)
Database=dbname

并且,此代码没有建立连接。

$dbh = new PDO('odbc:odbc-mes', $uid, $pwd);

端口全部打开。 tcpdump显示连接使用总是使用ms-sql -s(1433)。 sqlcmd工作正常。

# sqlcmd -U uid -P pwd -S 10.10.10.8,14233 -d OES
1> select @@version
2> go

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0 (X64) 
    Jul  9 2014 16:04:25 
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


(1 rows affected)
1>

我想知道我错过了什么。或者是否有其他方式与mssql连接?

  • CentOS 6.6
  • PHP 5.5.19
  • SQLNCLI-11.0.1790.0

-

# rpm -qa
php-5.5.19-2.el6.remi.x86_64
php-mssql-5.5.19-2.el6.remi.x86_64
php-odbc-5.5.19-2.el6.remi.x86_64
php-pdo-5.5.19-2.el6.remi.x86_64

# sqlcmd
Microsoft (R) SQL Server Command Line Tool
Version 11.0.1790.0 Linux
Copyright (c) Microsoft Corporation.  All rights reserved.

# cat /etc/sysconfig/selinux 
SELINUX=disabled
SELINUXTYPE=targeted 

1 个答案:

答案 0 :(得分:5)

该驱动程序不支持Port关键字。 Per the documentation,您需要在DSN中的服务器名称之后附加端口:

Server=10.10.10.5,14233

该文档还列出了支持 的关键字。