求助:如何通过wp-config.php配置WordPress连接SQL Server?连接失败报错
我来帮你拆解这个让人头疼的问题——你能用纯PHP代码连上SQL Server,但WordPress用相同凭据却失败,这大概率是驱动不匹配和地址配置格式的问题,咱们一步步来解决:
核心原因:WordPress默认用MySQL的mysqli驱动,不直接支持SQL Server
纯PHP能连接是因为你大概率用了sqlsrv_connect()这类专门针对SQL Server的函数,但WordPress默认调用的是mysqli扩展的方法(比如报错里的mysqli_real_connect()),而mysqli是为MySQL设计的,根本无法和SQL Server通信,这是最关键的问题。
具体解决步骤
1. 给WordPress配置SQL Server专用驱动
首先要让WordPress使用SQLSRV驱动,有两种方式:
- 插件方式(推荐):安装专门的WordPress SQL Server驱动插件,比如
WP DB Driver for SQL Server,插件会自动替换WordPress的数据库驱动,不用手动改代码。 - 手动配置:在
wp-config.php里添加一行代码,指定使用sqlsrv驱动:
同时确保你的PHP已经安装并启用了define('DB_DRIVER', 'sqlsrv');sqlsrv和pdo_sqlsrv扩展——可以通过phpinfo()页面查看是否有这两个扩展的信息,如果没有,需要下载对应PHP版本的SQLSRV扩展,放到PHP的ext目录,然后在php.ini里添加:
重启你的Web服务器(比如Apache或IIS)生效。extension=sqlsrv extension=pdo_sqlsrv
2. 修正DB_HOST的格式
SQL Server的地址格式和MySQL不一样,不能直接用localhost,需要指定实例名或端口:
- 如果是本地默认实例,改成:
localhost\SQLEXPRESS,1433(1433是SQL Server默认端口) - 如果是用IP访问,改成:
127.0.0.1,1433 - 如果是远程服务器,换成对应的服务器IP/域名+端口,比如
192.168.1.100,1433
为什么用localhost会报“主动拒绝连接”?因为mysqli默认会把localhost解析为MySQL的unix socket连接,而SQL Server用的是TCP/IP端口,所以它会尝试连接3306端口(MySQL默认端口),但你的机器上没开MySQL服务,就会被拒绝。
3. 确认SQL Server的TCP/IP连接已启用
打开SQL Server配置管理器,依次找到:
SQL Server网络配置 → 你的SQL Server实例的网络配置 → TCP/IP
右键启用TCP/IP,然后重启SQL Server服务,确保它在1433端口监听。
4. 核对数据库凭据权限
虽然纯PHP能连,但要确认你的SQL Server账号:
- 拥有WordPress目标数据库的读写权限
- 如果是Windows认证,需要配置Web服务器的运行账号有访问SQL Server的权限(这种情况WP的DB_USER和DB_PASSWORD可以留空,但要确保驱动支持Windows认证)
- 如果是SQL Server认证,确保用户名格式正确(不需要域名前缀,除非是域账号)
验证修改
修改完wp-config.php的DB_HOST、添加DB_DRIVER配置后,刷新WordPress页面,应该就能正常连接了。如果还是报错,检查PHP的错误日志,看是否有更详细的驱动错误信息。
内容的提问来源于stack exchange,提问作者john blair

