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

PHP 8.1用sqlsrv_connect连接MSSQL失败,如何进一步调试?

调试PHP sqlsrv连接MSSQL登录失败(错误18456)的步骤

以下是针对PHP 8.1 + ODBC Driver 18 + sqlsrv_connect场景的具体调试方案:

  • 核对连接参数细节
    确保$connectionInfo的配置完全匹配DBeaver的有效凭据:

    • 检查用户名、密码的拼写、大小写,SQL Server账号可能区分大小写(取决于服务器配置)
    • 明确指定身份验证方式,避免默认的Windows认证覆盖你的SQL Server账号:
      $connectionInfo = [
          "UID" => "your_actual_username",
          "PWD" => "your_actual_password",
          "Authentication" => SQLSRV_AUTH_SQL_SERVER,
          "TrustServerCertificate" => true // 适配ODBC 18默认强制加密的要求
      ];
      
    • 确认$serverName格式正确,比如"tcp:your-server,1433"(指定端口避免默认端口冲突)
  • 验证ODBC加密配置兼容性
    ODBC Driver 18默认启用强制加密,而DBeaver可能已配置信任服务器证书或使用非加密连接。在$connectionInfo中添加"TrustServerCertificate" => true临时跳过证书验证,排除加密层的问题。

  • 用命令行工具测试基础连接
    在PHP运行的服务器上,用sqlcmd命令行模拟相同参数连接,验证问题是否出在PHP代码之外:

    sqlcmd -S your_server_name -U your_username -P your_password -C
    

    (-C参数对应信任服务器证书)

    • 如果命令行连接失败:问题出在网络、服务器权限或凭据本身,排查SQL Server的登录权限、防火墙规则
    • 如果命令行连接成功:问题聚焦在PHP的sqlsrv扩展配置或代码细节
  • 检查PHP sqlsrv扩展状态
    生成phpinfo()页面,确认:

    • sqlsrv扩展已正确加载,且版本适配PHP 8.1
    • 扩展关联的ODBC驱动版本为18
  • 查看SQL Server详细错误日志
    登录SQL Server管理工具,打开「管理」→「SQL Server日志」,找到对应时间的登录失败记录。日志会给出具体失败原因,比如:

    • 账号被锁定
    • 密码过期
    • 账号无登录权限
    • IP地址被服务器拒绝

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:22