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

PHP连接MS SQL Server失败求助:首次开发表单提交至数据库遇阻

解决PHP 5.6连接MS SQL Server 2014 Express的问题

嘿,刚看到你的问题——第一次搞PHP表单连MS SQL确实容易踩驱动版本的坑,我来帮你一步步排查解决:

1. 先解决最核心的驱动版本不匹配问题

你提到用了php_pdo_sqlsrv_53_ts.dll和php_pdo_sqlsrv_53_nts.dll,但你的PHP版本是5.6.31,_53后缀对应的是PHP 5.3的驱动,完全不兼容5.6!这大概率是连接失败的根源。

你需要下载对应PHP 5.6版本的SQLSRV驱动,还要注意两个关键点:

  • 匹配你的PHP是线程安全(TS)还是非线程安全(NTS):在phpinfo()里找Thread Safety项,显示enabled就是TS,否则是NTS
  • 匹配系统架构(x86/x64):要和你的PHP、IIS架构一致

2. 正确配置驱动并验证

  • 把下载好的对应版本DLL(比如php_pdo_sqlsrv_56_ts.dll)放到PHP的ext文件夹
  • 打开php.ini,添加一行:
    extension=php_pdo_sqlsrv_56_ts.dll
    
    (如果是NTS版本就换成对应的文件名)
  • 重启IIS服务,然后访问phpinfo()页面,搜索pdo_sqlsrv,如果能看到对应的扩展信息,说明驱动加载成功了

3. 用最简代码测试连接

先写个简单的测试脚本,确认连接逻辑没问题:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

try {
    // SQL Server Express默认实例名是SQLEXPRESS,根据你的实际情况修改
    $serverName = "localhost\\SQLEXPRESS";
    $dbName = "你的数据库名称";
    $username = "SQL账号(比如sa)";
    $password = "账号密码";

    $connectionString = "sqlsrv:Server=$serverName;Database=$dbName";
    $conn = new PDO($connectionString, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "✅ 数据库连接成功!";
} catch(PDOException $e) {
    echo "❌ 连接失败:" . $e->getMessage();
}
?>

注意:如果你的SQL Server不是默认实例,要替换localhost\\SQLEXPRESS为你的实际实例名;如果用Windows身份验证,可以去掉用户名和密码,把连接字符串改成:

// Windows身份验证连接字符串示例
$connectionString = "sqlsrv:Server=$serverName;Database=$dbName;TrustServerCertificate=true;Authentication=ActiveDirectoryIntegrated";

4. 检查SQL Server的关键配置

如果驱动加载正常但还是连不上,要检查SQL Server的设置:

  • 确认SQL Server (SQLEXPRESS)服务已经启动:打开Windows服务列表,找到该服务,确保状态是“正在运行”
  • 启用TCP/IP协议:打开SQL Server配置管理器,依次展开SQL Server网络配置 -> SQLEXPRESS的协议,右键TCP/IP选择“启用”,然后重启SQL Server服务
  • 验证身份验证模式:打开SSMS,右键你的服务器 -> 属性 -> 安全性,确认选择的是“SQL Server和Windows身份验证模式”(如果用SQL账号的话)
  • 防火墙放行:确保Windows防火墙允许SQL Server的端口(默认是1433,如果是动态端口,需要在SQL Server配置管理器里查看TCP/IP的端口号,然后添加防火墙规则)

5. IIS权限排查

如果用Windows身份验证连接,要确保IIS应用池的身份账号有访问SQL Server的权限:

  • 打开IIS管理器,找到你的站点对应的应用池,查看“高级设置”里的“标识”(默认是ApplicationPoolIdentity)
  • 在SSMS里,给这个账号(格式是IIS APPPOOL\你的应用池名称)分配数据库的访问权限(比如db_datareader、db_datawriter)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:35:25