除了无法通过PHP构建的Web应用程序进行连接之外,我目前可以正常运行SQL Server。
每当我尝试连接到服务器时,都会出现以下错误:
Array([0] => Array([0] => 08001 [SQLSTATE] => 08001 [1] => 258 [代码] => 258 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序13] TCP 提供者:蒂格波·埃斯佩拉·埃斯佩拉·阿戈多多剧院。 [消息] => [Microsoft] [用于SQL Server的ODBC驱动程序13] TCP提供程序: 蒂珀科·德·埃斯佩拉·埃斯佩拉·阿戈多多剧院。 )[1] =>数组( [0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [代码] => 0 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序13]登录超时已过期 [消息] => [Microsoft] [用于SQL Server的ODBC驱动程序13]登录超时 过期)[2] =>数组([0] => 08001 [SQLSTATE] => 08001 [1] => 258 [代码] => 258 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序13] A 与网络相关或特定于实例的错误发生在 建立与SQL Server的连接。找不到服务器 无障碍。检查实例名称是否正确以及SQL Server是否正确 配置为允许远程连接。有关更多信息,请参见SQL。 服务器联机丛书。 [消息] => [Microsoft] [用于SQL的ODBC驱动程序13 服务器]期间发生了与网络相关或特定于实例的错误 建立与SQL Server的连接。找不到服务器 无障碍。检查实例名称是否正确以及SQL Server是否正确 配置为允许远程连接。有关更多信息,请参见SQL。 服务器联机丛书。 )
我几乎尝试了在StackOverflow和其他网站上发现的每个修补程序,但没有一个起作用。
我确认的事情:
我使用的PHP代码不是很复杂:
$serverName = "111.111.111.111";
$connectionInfo = array(
"Database"=>"DBName",
"UID"=>"sa",
"PWD"=>"DBPWD",
"CharacterSet"=>"utf-8"
);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ( $conn ) {
echo "Good";
} else {
echo "Bad.<br />";
die( print_r( sqlsrv_errors(), true));
}
我尝试了很多不同的事情,例如:
$serverName = "111.111.111.111\INSTANCE";
$serverName = "111.111.111.111/INSTANCE";
$serverName = "111.111.111.111, 1433";
但是它们都没有起作用。
再次,我不认为这是网络问题,因为我可以使用SQL Management Studio从外部连接到数据库,但是我不能从PHP应用程序中完成此操作。
当脚本在网络内部运行并且公共IP被主机名替换时,代码才起作用。这应该表明代码也可以。
我可能会缺少什么?