PHP无法连接SQL Server求助(PHP8.1+SQL Server2019)
问题:PHP 8.1 连接 SQL Server 2019 出现 IM006 错误
环境配置
- PHP 8.1
- SQL Server 2019(也曾尝试SQL Server 2022)
- 应用在其他同配置环境运行正常,当前环境持续报错
连接代码
$connectionInfo = array("Database" => 'database_name', "UID" => 'sa', "PWD" => 'password'); $conn = sqlsrv_connect(DB_server, $connectionInfo); if(!$conn) { echo "Could not connect"; echo "<pre>"; die(print_r(sqlsrv_errors(), true)); }
注:原代码中echo ""<pre>;存在语法错误,已修正为echo "<pre>";
错误信息
Array ( [0] => Array ( [0] => IM006 [SQLSTATE] => IM006 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver Manager] Drivers'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 'database_name'. [message] => [Microsoft][ODBC Driver 17 for SQL Server][Sql Server]Changed database context to 'database_name'. ) [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. ) )
已尝试排查步骤
- 更换SQL Server版本(2019/2022)
- 验证sa账号凭据正确性
- 安装不同版本的ODBC驱动
- 检查php.ini中
php_sqlsrv.dll和php_pdo_sqlsrv.dll的路径配置
解决方案建议
1. 确认ODBC驱动与PHP位数匹配
执行php -v查看PHP运行位数(32/64位),卸载不匹配的ODBC驱动,安装对应位数的版本(推荐ODBC Driver 18 for SQL Server)。
2. 显式指定驱动版本
在连接参数中添加Driver字段,强制指定使用的ODBC驱动:
$connectionInfo = array( "Database" => 'database_name', "UID" => 'sa', "PWD" => 'password', "Driver" => "{ODBC Driver 17 for SQL Server}" // 替换为实际安装的驱动版本 );
3. 启用SQL Server TCP/IP协议
打开SQL Server配置管理器,展开「SQL Server网络配置」,选中对应实例的协议,确保TCP/IP已启用,随后重启SQL Server服务。
4. 验证PHP扩展加载状态
执行php -m确认sqlsrv和pdo_sqlsrv扩展已加载。若未加载:
- 下载与PHP 8.1版本匹配的扩展包
- 在php.ini中添加正确的扩展配置:
extension=php_sqlsrv.dll extension=php_pdo_sqlsrv.dll - 重启Web服务器(IIS/Apache/Nginx)
5. 测试ODBC数据源连接
打开对应位数的ODBC数据源管理器(odbcad32.exe),创建系统DSN,输入服务器地址、数据库、sa账号密码,测试连接。若连接失败,根据提示排查SQL Server权限或网络问题。
内容的提问来源于stack exchange,提问作者Sayed
相关产品推荐
相关产品推荐

