其他服务器上的PHP和MSSQL 2012 Express数据库-连接错误

其他服务器上的PHP和MSSQL 2012 Express数据库-连接错误,php,sql,sql-server,linux,Php,Sql,Sql Server,Linux,作为标题,我在使用MSSQL 2012 Express从Linux服务器连接到服务器时遇到问题 具有MSSQL的服务器: 视窗8 MSSQL 2012 Express,已打开且运行正常; 路由器上dyndns.org端口上的IP已正确转发,1433已打开且“正在侦听”; Windows防火墙已禁用; 路由器防火墙被禁用; 使用Linux的服务器: php5.2; 脚本: $server = 'xxxxxxx.dyndns.org'; $username = 'xxxxxxx'; $passw

作为标题,我在使用MSSQL 2012 Express从Linux服务器连接到服务器时遇到问题

具有MSSQL的服务器:

视窗8 MSSQL 2012 Express,已打开且运行正常; 路由器上dyndns.org端口上的IP已正确转发,1433已打开且“正在侦听”; Windows防火墙已禁用; 路由器防火墙被禁用; 使用Linux的服务器:

php5.2; 脚本:

$server   = 'xxxxxxx.dyndns.org';
$username = 'xxxxxxx';
$password = 'xxxxxxx';
$database = 'xxxxx';

if (mssql_connect($server, $username, $password))
{
    echo "CONNECTION SUCCESS!";
}
else
{
    echo "CONNECTION FAIL";
}
结果:

Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: xxxxxxx.dyndns.org in (....) on line 8


Connection failed: A connection attempt failed because the connected party did 
not properly respond after a period of time, or established connection failed 
because connected host has failed to respond Connection failed: A connection 
attempt failed because the connected party did not properly respond after a 
period of time, or established connection failed because connected host has failed 
to respond xxx.xxx.xxx.xxx:1433

我刚才也犯了同样的错误。我使用的是TCP动态端口,这是不允许通过防火墙的。因为它是一个动态端口,所以很难只允许该端口

您可以通过重新启动SQL server实例进行检查,然后在事件查看器中查看SQL server正在侦听的端口(如果存在相同问题)

打开SQL Server配置管理器

然后打开SQL Server网络配置>SQLExpress协议或您正在使用的任何db引擎>TCP/IP>IP地址

确保在您的IP地址中,您的TCP端口被设置为您希望使用的正确端口。不完全确定这是否需要,但不会造成伤害

现在,当您转到最后一项IPAll时,请将TCP动态端口设置为空。这将禁用动态端口选择,并填写您希望在TCP端口下使用的TCP端口

打开windows高级防火墙,并允许所选端口接受连接(如果还没有相关规则)

您应该在入站规则下添加一个规则,将其命名为SQL端口或其他名称。在操作下允许连接

在“协议和端口”选项卡上,选择协议类型:TCP、本地端口特定端口1433或您的端口号、远程端口所有端口

在作用域上,对于本地IP地址,对于远程IP地址,您可以选择任意IP地址或添加您希望添加的IP地址列表

然后转到SQL Server Management Studio,在服务器上单击鼠标右键,然后选择“重新启动”以重新启动数据库服务器


您将收到两个提示,一个来自uac。然后,如果确实希望重新启动,请从sql server中选择一个。第二个窗口可能会消失在其他窗口后面,需要一些时间才能出现。因此,点击重启后,请耐心等待,不要点击uac消息以外的内容。

如果我理解正确,您可以在家运行MS Windows服务器吗?哇!在该服务器上,您在路由器后面运行mssql数据库,并希望使用dyndns从外部连接到该服务器?如果路由器上没有端口转发,这将不起作用。客户端尝试连接到路由器,而不是mssql服务器。路由器连接到dyndns,并已将端口1433转发到192.168.1.34:1433。那么,如果从linux系统到路由器进行简单的telnet测试,您会得到什么?telnet xxxxxxx.dyndns.org 1433?那么,telnet测试显示了什么?连接失败:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应连接失败而导致建立的连接失败:由于连接方在一段时间后未正确响应而导致连接尝试失败,或者由于连接的主机未能响应xxx.xxx.xxx:1433而导致建立的连接失败