phpEnv如何安装Sqlsrv扩展并连接SQL Server数据库?

来源:Java教程作者:香港程序员头衔:程序员
导读:本期聚焦于香港程序员创作的《phpEnv如何安装Sqlsrv扩展并连接SQL Server数据库?》,敬请观看详情。在Windows环境下用phpEnv搭建PHP站点时,如果需要连接SQL Server数据库,就必须安装Sqlsrv扩展,否则会报未定义函数的错误。本文围绕phpEnv安装Sqlsrv扩展的完整流程展开,讲解如何确认PHP版本与线程安全模式、去微软官方下载对应版本的DLL文件、将扩展放入ext目录并修改php.ini配置,同时处理ODBC驱动依赖这个容易被忽略的环节。文中还给出了使用sqlsrv_connect连接SQL Server的完整代码示例,以及常见的连接失败排查思路,比如扩展加载不成功、驱动版本不匹配、TCP/IP协议未启用等问题,帮助你顺利完成PHP与SQL Server的通信。

phpEnv是一款国产的Windows平台PHP集成环境,自带Apache、Nginx、MySQL等常用组件,日常开发非常方便。但它的PHP发行包里默认并不包含Sqlsrv扩展,一旦项目需要对接SQL Server数据库,调用sqlsrv_connect时就会直接报Call to undefined function的错误。要让phpEnv里的PHP具备连接SQL Server的能力,需要手动安装Sqlsrv扩展,同时安装微软的ODBC驱动作为底层依赖。本文把整个流程拆开讲清楚,并附上连接测试代码和常见报错的排查方法。

phpEnv如何安装Sqlsrv扩展并连接SQL Server数据库?

一、安装前必须确认的两个信息

Sqlsrv扩展的DLL文件和PHP版本是强绑定的,下载错了根本加载不上,所以动手之前先要把两件事弄清楚:PHP的小版本号和线程安全模式(Thread Safe还是Non Thread Safe)。

打开phpEnv面板,切换到PHP版本页面,可以看到当前使用的PHP版本,比如8.0.2、7.4.33等。接着在站点根目录新建一个phpinfo.php文件,内容为<?php phpinfo();,浏览器访问这个文件,在页面顶部找到Thread Safety一栏。如果显示enabled,说明是线程安全版本(TS),显示disabled则是非线程安全版本(NTS)。也可以直接看phpinfo里Extension Dir指向的目录,后面放DLL文件时会用到。

确认好之后记录下来,比如PHP 7.4 NTS、PHP 8.0 TS这样的组合。微软官方提供的Sqlsrv扩展文件命名规则是php_sqlsrv_74_nts.dll这种形式,74代表PHP 7.4,nts代表非线程安全,必须和你的环境完全对应。装错了版本时PHP启动会静默失败或者Apache直接起不来,这是新手最容易踩的坑。

二、下载并配置Sqlsrv扩展

Sqlsrv扩展由微软官方维护,可以去微软的下载中心获取,搜索Microsoft Drivers for PHP for SQL Server就能找到下载页。下载页面提供了多个版本的压缩包,例如5.8版本支持PHP 7.0到7.4,5.10版本支持PHP 7.4到8.0,5.11和5.12版本支持PHP 8.0以上。选择压缩包时要根据前面确认的PHP版本决定,不要盲目下最新版。

解压后会看到一堆DLL文件,按命名筛选出符合自己环境的那两个文件:php_sqlsrv_74_nts.dll和php_pdo_sqlsrv_74_nts.dll(以PHP 7.4 NTS为例)。前者是Sqlsrv函数库,后者是PDO驱动,建议两个都装。把它们复制到phpEnv对应PHP版本的ext目录下,路径一般在phpEnv安装目录的php\php-7.4.33-nts\ext这样的位置,具体以phpinfo中Extension Dir显示的为准。

接下来打开同目录下的php.ini,在扩展配置区域添加两行:

extension=php_sqlsrv_74_nts.dll
extension=php_pdo_sqlsrv_74_nts.dll

保存后回到phpEnv面板重启Apache或者Nginx加PHP。再次访问phpinfo页面,搜索sqlsrv关键字,如果能找到sqlsrv和pdo_sqlsrv两个模块的信息,说明扩展已经加载成功。如果PHP起不来或者扩展没出现,八成是版本没对上,回头检查TS/NTS和PHP小版本号。

三、安装ODBC驱动并处理依赖

Sqlsrv扩展只是上层封装,真正和SQL Server通信的是微软的ODBC Driver for SQL Server。phpEnv默认没有带这个组件,缺少它时扩展虽然能加载成功,但连接时会报This extension requires the Microsoft ODBC Driver for SQL Server之类的错误。

去微软官网下载Microsoft ODBC Driver 17或18 for SQL Server,注意选择x64版本(如果PHP是32位的就选x86,现在基本都是64位环境)。安装过程是标准的向导式操作,一路下一步即可。装完之后建议重启一次电脑,确保系统驱动生效。

还有一个容易忽略的点:SQL Server本身默认没有启用TCP/IP协议,只开了共享内存,导致远程或本地通过IP连接时失败。打开SQL Server配置管理器,在SQL Server网络配置中找到实例的协议项,把TCP/IP设置为启用,然后重启SQL Server服务。同时确认SQL Server Browser服务是否需要开启,以及防火墙是否放行了1433端口。

四、编写连接代码并测试

环境全部就绪后,写一段简单的测试脚本来验证连接。下面是用sqlsrv方式连接并查询数据的示例:

<?php
$serverName = "127.0.0.1"; // SQL Server地址,带实例名写成 127.0.0.1\SQLEXPRESS
$connectionInfo = array(
    "Database" => "testdb",
    "UID"      => "sa",
    "PWD"      => "你的密码",
    "CharacterSet" => "UTF-8" // 避免中文乱码
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
    // 打印详细错误信息方便排查
    die(print_r(sqlsrv_errors(), true));
}
$sql = "SELECT id, name FROM users";
$stmt = sqlsrv_query($conn, $sql);
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    echo $row['id'] . ' - ' . $row['name'] . '<br>';
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

如果项目用的是PDO,也可以通过pdo_sqlsrv驱动连接,写法更统一:

<?php
try {
    $pdo = new PDO(
        "sqlsrv:Server=127.0.0.1;Database=testdb",
        "sa",
        "你的密码"
    );
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $rows = $pdo->query("SELECT id, name FROM users")->fetchAll(PDO::FETCH_ASSOC);
    print_r($rows);
} catch (PDOException $e) {
    echo '连接失败:' . $e->getMessage();
}

五、常见问题排查

连接失败时先看具体报错信息,不同错误对应不同原因。报Call to undefined function sqlsrv_connect,说明扩展没加载成功,回到phpinfo确认模块是否存在,检查DLL版本和php.ini配置。报ODBC Driver相关错误,说明系统缺少驱动或者版本过低,重新安装对应版本的ODBC Driver。

报连接被拒绝或者超时,通常是SQL Server的TCP/IP协议没启用、1433端口被防火墙拦截,或者实例名写错了。Express版默认是实例名SQLEXPRESS,地址要写成主机名\SQLEXPRESS的形式。中文乱码问题可以在连接参数里加CharacterSet指定UTF-8解决,同时保证数据库排序规则和页面编码一致。

另外提醒一点,phpEnv支持多PHP版本共存,切换版本后ext目录和php.ini都是各自独立的,之前装的扩展不会自动带过去,需要在新版本下重新安装一遍。SQL Server账号建议不要在生产环境直接用sa,应该创建权限受限的专用账号,这也是数据库安全的基本要求。按照以上步骤操作下来,phpEnv环境下的PHP就能稳定地和SQL Server进行数据交互了。

phpEnvSqlsrv扩展SQL Server连接修改时间:2026-09-10 14:59:05

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0910/54093.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。