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

PHP连接SQL Server遇SQLSTATE[28000]登录失败问题求助

解决SQL Server登录失败的排查方案

问题分析

报错 SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user $username 指向SQL账号登录被拒,ODBC版本不是核心问题,重点排查账号有效性、连接参数、权限配置。

排查步骤

  • 验证账号密码有效性
    用SQL Server Management Studio(SSMS)手动测试:选择「SQL Server身份验证」,输入代码里的$username和$password登录。如果SSMS登录失败,说明账号密码错误、账号被锁定或禁用,先在数据库端修复账号状态。
  • 检查账号的数据库访问权限
    即使账号能登录SSMS,也要确认它有权访问目标数据库$dbname:在SSMS中找到该账号→右键「属性」→「用户映射」,勾选目标数据库,至少分配基础读写权限(如db_datareader/db_datawriter)。
  • 修正连接字符串参数
    连接字符串的Server参数格式常出问题:
    • 本地数据库:尝试localhost、127.0.0.1或.\SQLEXPRESS(Express版默认实例名)
    • 远程数据库:需指定端口,格式为Server=xxx.xxx.xxx.xxx,1433(1433为默认端口,修改过则对应调整)
    • ODBC 17+默认要求加密,可添加Encrypt=yes参数:
      $conn = new PDO("sqlsrv:Server=$servername;Database=$dbname;Encrypt=yes", $username, $password);
      
  • 确认SQL Server服务运行状态
    打开services.msc,检查对应SQL Server实例的服务(如SQL Server (MSSQLSERVER))是否处于运行状态,未启动则手动启动。
  • 排查防火墙限制
    远程连接时,确保数据库服务器防火墙开放了SQL Server端口(默认1433),同时本地防火墙允许PHP进程访问该端口。
  • 检查PHP sqlsrv扩展
    执行以下代码确认PHP是否加载了sqlsrv驱动:
    print_r(PDO::getAvailableDrivers());
    
    输出需包含sqlsrv,否则需下载对应PHP版本的sqlsrv扩展,配置到php.ini中。

额外提示

若使用SQL Server Express版本,实例名默认为SQLEXPRESS,连接字符串的Server参数需写成.\SQLEXPRESS或localhost\SQLEXPRESS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:55:17