如标题所示,我在使用 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
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 协议(protocol)(或您正在使用的任何数据库引擎)> TCP/IP > IP 地址
确保在您的 IP 地址中将您的 TCP 端口设置为您希望使用的正确端口(不完全确定这是必需的,但不会造成伤害)
现在,当您来到最后一项 IPAll 时,将 TCP 动态端口设置为空。这将禁用动态端口选择,并在 TCP 端口下填写您希望使用的 TCP 端口
打开 windows 高级防火墙并允许您选择的端口接受连接,如果还没有规则的话。
您应该在入站规则下添加一条规则,将其命名为 SQL 端口或其他名称。在“允许连接”操作下
在协议(protocol)和端口选项卡上选择协议(protocol)类型:“TCP”,本地端口“特定端口”“1433”(或您的端口号),远程端口“所有端口”
在范围内,本地的任何 IP 地址,对于远程,您可以选择“任何”或添加您希望添加的 IP 列表
然后转到您的 SQL Server Management Studio 并右键单击服务器即时并选择重新启动以重新启动数据库服务器。
您将收到两个提示,一个来自 uac。如果您真的确定要重新启动,那么从 sql server 中获取一个。第二个可能会消失在其他窗口后面,并且可能需要一些时间才能出现。因此,在点击重启后,请耐心等待,不要点击除 uac 消息以外的内容。
关于其他服务器上的 PHP 和 MSSQL 2012 Express 数据库 - 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798915/