PHP:使用动态端口分配连接到MS SQL Server

时间:2014-04-02 14:27:46

标签: php sql-server

我尝试使用PHP浏览客户的Microsoft SQL服务器数据库,但端口1433已关闭。挖掘我发现MSSQL可以在动态端口分配模式下运行,这意味着它将在首次执行时选择一个随机侦听端口,并且可能在启动时保持相同。我知道我可以找到当前端口,但由于可能 发现要连接的端口?

通过我的搜索可以理解,这项工作通常由SQLBrowser(.exe?)完成,但如何在Linux上完成?

解决方案的更新

而@ Chris'回答是正确的我错过了一个简单而重要的部分:每次更改odbc.ini都需要运行:

odbcinst -i -s -f /etc/odbc.ini

更新系统的DSN。 之后我可以使用

连接
isql -v DSN_NAME username password

故障排除

检查服务器实例:

tsql -H HOSTNAME_OR_IP -L

这将打印服务器信息,包括您应该能够使用标准telnet或mssql客户端连接的实例名称和端口。

2 个答案:

答案 0 :(得分:1)

简短回答:

ODBC驱动程序知道在端口1434上联系SQL服务器以查找与命名实例关联的动态端口。用户SERVERNAME\INSTANCENAME进行连接。

答案很长:

我开始here,导致herehere

最终我找到了this

  

如果您正在使用具有多个实例和动态端口的mssql   您可以使用以下分配:

[SQLServer2008]
Description     = Production Server
Driver          = TDS
Trace           = No
Server          = servername\instance_name
TDS_Version     = 8.0

似乎在类似的IBM Doc

中得到了回应
  

<强>问题

     

SQLServer设置为动态分配端口。在.odbc.ini文件中,   Address参数通常设置为hostname冒号端口号   (Address = HostName:1433),但端口可能会更改。我们该怎么办?   这个?

     

<强>答案

     

对于Address参数值,而不是输入主机名   冒号端口,输入反斜杠和服务器实例的主机名   名。

     

例如,在Unix / Linux中,使用IBM SQLServer Wire Protocol驱动程序   并在DSN定义中的.odbc.ini文件中输入以下内容   用于连接SQLServer数据源:

     

地址=主机名\ Server_Instance_Name

     

对于Windows,请使用ODBC数据源管理员配置   使用IBM SQLServer Wire Protocol的数据源的系统DSN   驱动程序。

     

注意:参数是服务器

答案 1 :(得分:1)

鉴于你的答案是正确的,我不得不做一些小改动才能使它发挥作用。我决定在这里写。步骤基本相同。在Ubuntu / Debian上:

apt-get install php5-sybase unixodbc tdsodbc

修改/etc/odbcinst.ini并添加驱动程序详细信息

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

修改/etc/odbc.ini并输入连接详情

[SQLSRV01]
Description = SQL Server test
Driver = TDS
Trace = No
Server = SERVER_IP\INSTANCE_NAME
TDS_Version = 9.0
#Database = DataBaseName
#ReadOnly = Yes

最后两个参数是可选的。 驱动程序必须与我们在odbcinst.ini中编写的内容相匹配。 服务器指令必须采用该语法(当然 SERVER_IP 也可以是主机名)。

根据UnixODBC的说法,下一步不应该是必要的,但这就是我的安装工作的原因。运行以下命令(每次更改odbc.ini时)

odbcinst -i -s -f /etc/odbc.ini

在此之后,您应该可以使用以下方式进行连接:

isql -v SQLSRV01 nome_utente password

或通过PHP:

$db = new PDO("dblib:host=SQLSRV01;dbname=DBNAME","USERNAME","PASSWORD");