【发布时间】:2021-08-11 18:43:37
【问题描述】:
这是整个错误:
连接失败
Array ( [0] => Array ( [0] => IM006 [SQLSTATE] => IM006 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed [message] => [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed ) [1] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5701 [code] => 5701 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'sodb'. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'sodb'. ) [2] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5703 [code] => 5703 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed language setting to us_english. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed language setting to us_english. ) )
我已经成功安装了以下扩展,它们显示在 phpinfo() 下
extension=php_sqlsrv_73_ts_x64.dll
extension=php_sqlsrv_73_nts_x64.dll
extension=php_pdo_sqlsrv_73_nts_x64.dll
extension=php_pdo_sqlsrv_73_ts_x64.dll
extension=php_sqlsrv_73_ts_x86.dll
extension=php_sqlsrv_73_nts_x86.dll
extension=php_pdo_sqlsrv_73_nts_x86.dll
extension=php_pdo_sqlsrv_73_ts_x86.dll
extension=php_sqlsrv_80_ts_x64.dll
extension=php_sqlsrv_80_nts_x64.dll
extension=php_pdo_sqlsrv_80_nts_x64.dll
extension=php_pdo_sqlsrv_80_ts_x64.dll
extension=php_sqlsrv_80_ts_x86.dll
extension=php_sqlsrv_80_nts_x86.dll
extension=php_pdo_sqlsrv_80_nts_x86.dll
extension=php_pdo_sqlsrv_80_ts_x86.dll
这是我抛出此错误的 php 代码:
$serverName = "***********************";
$connectionInfo = array( "Database"=>"*********", "UID"=>"*********", "PWD"=>"*************");
$maxret = 3;
$conn = false;
do {
$conn = sqlsrv_connect($serverName, $connectionInfo);
if($conn !== false) break;
sleep(2);
} while($maxret-- >= 0);
我已经安装了 ODBC 相关的库
我在三台不同的机器上工作,它们具有不同的 IP 地址,都在 azure 防火墙上启用(sql 数据库在 azure 上)。在它工作的一台机器上,两台机器产生上述错误。
两台机器上的相同 php.ini 文件和 wamp 中列出的扩展名是相同的。 php 脚本在一台机器上运行,在另一台机器上会产生错误。
【问题讨论】:
-
考虑格式化日志。
-
如果您的 SQL Server 不在 LocalHost 上,您是否尝试从其他地方连接到它以确保允许远程连接?
-
是的,我可以从另一台机器上的另一个ip连接到sql server,实际上是多台其他机器