PHP通过ODBC连接SQL Server时遇IM006错误:含义及解决方法
PHP连接SQL Server时IM006错误的解析与解决
错误信息
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 11 for SQL Server][SQL Server]Changed database context to 'TclStsDB'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Changed database context to 'TclStsDB'. ) [2] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5703 [code] => 5703 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Changed language setting to us_english. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Changed language setting to us_english. )
连接代码
<?php $serverName = "WIN-8OA3CCQAE4D"; //serverName\instanceName // Since UID and PWD are not specified in the $connectionInfo array, // The connection will be attempted using Windows Authentication. array( "Database"=>"TclStsDB"); $connectionInfo = array( "Database"=>"TclStsDB", "UID"=>"admin", "PWD"=>"Pl@yOn24@dm!n@2kEBD"); $con = sqlsrv_connect( $serverName, $connectionInfo); if( $con ) { //echo "Connection established.<br />"; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } ?>
IM006错误含义
SQLSTATE IM006 表示ODBC驱动管理器调用驱动的SQLSetConnectAttr函数失败。这个错误发生在驱动层面,通常是连接属性配置不兼容、驱动版本问题,或者身份验证参数异常导致的。
从附带的01000提示来看,SQL Server已经成功切换了数据库上下文和语言设置,说明服务器端已收到连接请求,但驱动管理器无法完成最终的连接属性设置,导致连接失败。
解决步骤
- 升级ODBC驱动版本:当前使用的ODBC Driver 11版本较旧,对新连接属性支持有限,建议升级到ODBC Driver 17或18 for SQL Server,新版本与PHP的
sqlsrv扩展兼容性更好。 - 验证服务器名称与实例:如果SQL Server是命名实例,需在
$serverName中添加实例名,格式为WIN-8OA3CCQAE4D\实例名;如果是默认实例,确认服务器名称可被PHP所在服务器访问(可通过ping测试连通性)。 - 检查身份验证配置:
- 确认SQL Server已开启混合身份验证模式(SQL Server和Windows身份验证模式)。
- 验证
admin账号是否有登录SQL Server的权限,密码Pl@yOn24@dm!n@2kEBD是否输入准确(注意特殊字符的正确性)。
- 调整连接属性:尝试添加加密相关属性,避免因加密设置不匹配导致的属性设置失败:
$connectionInfo = array( "Database"=>"TclStsDB", "UID"=>"admin", "PWD"=>"Pl@yOn24@dm!n@2kEBD", "Encrypt"=>false, "TrustServerCertificate"=>true ); - 匹配
sqlsrv扩展版本:确保PHP的sqlsrv扩展版本与ODBC驱动、PHP版本兼容,比如PHP 7.4+建议使用5.9及以上版本的sqlsrv扩展。 - 手动测试ODBC连接:在PHP所在服务器的ODBC数据源管理器中创建系统DSN,选择对应SQL Server驱动,输入服务器、数据库、账号密码测试连接。如果手动连接成功,再将配置对应到PHP代码中。
内容的提问来源于stack exchange,提问作者Bhowmik Sanad
相关产品推荐
相关产品推荐

