You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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测试连通性)。
  • 检查身份验证配置:
    1. 确认SQL Server已开启混合身份验证模式(SQL Server和Windows身份验证模式)。
    2. 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:03:16