另一台服务器上的PHP和SQL 2012 Express数据库 - 连接错误

时间:2014-02-15 14:37:25

标签: php sql sql-server linux

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

带有MSSQL的服务器:

  • Windows 8
  • MSSQL 2012 Express,已打开并正常运行;
  • dyndns.org上的IP(路由器上的端口已正确转发,1433已打开且正在“收听”);
  • 禁用Windows防火墙;
  • 路由器防火墙已禁用;

Linux服务器:

  • PHP 5.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

1 个答案:

答案 0 :(得分:0)

我刚才有这个完全相同的错误。对于我来说,它使用的是TCP动态端口,防火墙不允许这样做。由于它是一个动态端口,因此很难仅允许该端口。

您可以通过重新启动SQL Server实例进行检查,然后在事件查看器中查看SQL Server正在侦听的端口。

Sql server listening on wrong port

打开SQL Server配置管理器

然后打开“ SQL Server网络配置”>“ SQLEXPRESS协议(或您使用的任何数据库引擎)”>“ TCP / IP”>“ IP地址”

Where to browse in SQL server configuration manager

确保在IP地址中将TCP端口设置为您要使用的正确端口(不完全确定这是必需的,但不会造成损害)

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

Set TCP Dynamic ports to empty

打开Windows高级防火墙,并允许您选择的端口接受连接(如果尚无规则)。

您应该在入站规则下添加一个规则,将其命名为SQL port或其他名称。在“允许连接”操作下 setting up firewall rule

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

Defining ports

在范围上,对于本地的任何IP地址,对于远程,您都可以选择“任何”或添加要添加的IP列表

Where to allow connections from

然后转到SQL Server Management Studio,右键单击服务器即时并选择重新启动以重新启动数据库服务器。

Restart SQL Server

您会收到两个提示,一个来自uac。如果确实确定要重新启动,则从sql server中获取一个。第二个可能消失在其他窗口后面,并且可能需要一些时间才能显示出来。因此,点击重新启动后,请耐心等待,不要点击除了uac消息以外的内容。