Sql server PDO_ODBC和unixODBC无法使用非默认端口连接MSSQL

Sql server PDO_ODBC和unixODBC无法使用非默认端口连接MSSQL,sql-server,port,unixodbc,pdo-odbc,Sql Server,Port,Unixodbc,Pdo Odbc,我必须在php/linux环境下连接两个MSSQL服务器。所以我决定使用unixODBC和PDO_-ODBC 服务器1上的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.

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

  • 服务器1上的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');
奇怪的是,这段代码在错误的值下也可以正常工作(

我的结论是有人忽略了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
# 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>
而且,这个代码没有连接

$dbh = new PDO('odbc:odbc-mes', $uid, $pwd);
端口全部打开。
tcpdump
显示连接使用始终使用ms-sql-s(1433)。
sqlcmd
工作正常

[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
# 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>

驱动程序不支持
端口
关键字。您需要在DSN中的服务器名称后追加端口:

Server=10.10.10.5,14233

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

工作正常!感谢您的参考。实际上,我尝试了该设置,但由于连接不稳定而出错。