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

通过XAMPP连接SQL数据库报错:Driver's SQLSetConnectAttr failed

问题根因分析

  1. 报错信息中的后两条01000状态码内容属于正常连接通知,仅为SQL Server告知客户端已成功切换到指定数据库、切换到默认英文语言,本身不属于错误。你输入错误账号密码时能返回正常的登录失败报错,也佐证了网络和基础连接逻辑完全正常。
  2. 连接返回失败的核心原因有两个:
    • sqlsrv扩展默认开启了「警告视为错误」的配置,上述正常通知被判定为错误,直接导致sqlsrv_connect返回false
    • 你当前使用的ODBC Driver 11版本较老,和PHP 8.0对应的新版sqlsrv扩展存在兼容性瑕疵,会触发IM006的属性设置警告,进一步被错误规则拦截

解决方案

方案1:调整sqlsrv错误处理配置(优先验证)

在调用连接方法前,先修改sqlsrv的错误处理规则,仅将实际错误视为连接失败,忽略警告类信息:

function mssqlConnect(){
  // 新增两行配置,关闭警告视为错误的规则
  sqlsrv_configure("WarningsReturnAsErrors", 0);
  sqlsrv_configure("LogSeverity", SQLSRV_LOG_SEVERITY_ERROR);

  $ServerName = "xxx";
  $ConnectionTimeout = 30;
  $connectionOptions = ["Database"=>"database","UID"=>"user","PWD"=>"password", "LoginTimeout" => $ConnectionTimeout];
  
  $sqlconn = sqlsrv_connect($ServerName,$connectionOptions);
  if( $sqlconn ) {
    echo "Connection established";
  } else {
    echo "Connection could not be established";
    die( print_r( sqlsrv_errors(), true));
  }
}

修改后重新运行即可正常得到连接成功的提示。

方案2:升级ODBC驱动

适配PHP 8.0的sqlsrv扩展官方要求最低使用ODBC Driver 17 for SQL Server,你当前使用的11版本迭代时间过早,兼容性不足。可卸载当前ODBC驱动后安装17及以上版本,无需修改代码即可从底层解决兼容性问题。

方案3:显式指定驱动(临时兼容)

如果暂时无法升级ODBC驱动,可在连接参数中显式指定本地安装的ODBC驱动名称,避免驱动管理器自动匹配时出现属性设置异常:

$connectionOptions = [
    "Database"=>"database",
    "UID"=>"user",
    "PWD"=>"password", 
    "LoginTimeout" => $ConnectionTimeout,
    "Driver" => "ODBC Driver 11 for SQL Server"
];

内容的提问来源于stack exchange,提问作者Sicktightyo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 17:15:04