uki*_*its 2 sql-server port unixodbc pdo-odbc
我必须在php/linux环境中连接两个MSSQL服务器.所以我决定使用unixODBC和PDO_ODBC.
server1上的mssql:10.10.10.5:1433
server2上的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');
Run Code Online (Sandbox Code Playgroud)
这段代码不起作用.连接失败.
$db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.8; Port=14233; Database=dbname; UID=uid; PWD=pwd');
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这个代码也适用于错误的值.:(
$db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.5; Port=14233; Database=dbname; UID=uid; PWD=pwd');
Run Code Online (Sandbox Code Playgroud)
我得出结论,有人忽略了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
Run Code Online (Sandbox Code Playgroud)
并且,此代码没有建立连接.
$dbh = new PDO('odbc:odbc-erp', $uid, $pwd);
Run Code Online (Sandbox Code Playgroud)
错误信息:
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
Run Code Online (Sandbox Code Playgroud)
并且,此代码工作正常.
[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
Run Code Online (Sandbox Code Playgroud)
并且,此代码没有建立连接.
$dbh = new PDO('odbc:odbc-mes', $uid, $pwd);
Run Code Online (Sandbox Code Playgroud)
港口全部开放.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>
Run Code Online (Sandbox Code Playgroud)
我想知道我错过了什么.或者是否有其他方式与mssql连接?
-
# 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
Run Code Online (Sandbox Code Playgroud)
驱动程序不支持Port关键字.根据文档,您需要在DSN中的服务器名称后附加端口:
Server=10.10.10.5,14233
Run Code Online (Sandbox Code Playgroud)
该文件还列出了该关键字的支持.
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |