phpEnv下安装sqlsrv和pdo_sqlsrv必须手动操作:下载匹配PHP版本及NTS/x64架构的DLL,复制到%PHPEXTPATH%\ext\目录,php.ini中添加extension=sqlsrv和extension=pdo_sqlsrv(不带.dll后缀),并单独安装Microsoft ODBC Driver for SQL Server。

phpEnv 下安装 sqlsrv 和 pdo_sqlsrv 扩展必须手动复制 DLL
phpEnv 是 Windows 下轻量级 PHP 环境管理工具,不提供图形化扩展安装界面,所有 SQL Server 扩展都得手动下载、匹配、复制、配置——靠点选或一键安装会失败。
关键动作只有三步:找对 DLL、放对目录、改对 php.ini。漏掉任一环,php -m | grep sqlsrv 就不会输出任何内容。
- 先确认你的 phpEnv 当前启用的 PHP 版本和架构:打开终端执行
php -v和php -i | findstr "Thread Safety Architecture",重点看是否为NTS(非线程安全)和x64(64 位)——绝大多数 phpEnv 默认用的是 NTS x64 - 去微软官方驱动页下载对应版本的 DLL:
php_sqlsrv_81_nts_x64.dll和php_pdo_sqlsrv_81_nts_x64.dll(若你用的是 PHP 8.1;版本号需严格匹配) - 把两个 DLL 复制到 phpEnv 的扩展目录,通常是
%PHPEXTPATH%\ext\(比如C:\phpEnv\php\php-8.1.22-nts-x64\ext\),不是系统 PHP 目录,也不是其他环境的 ext
php.ini 必须显式启用扩展且不能带 .dll 后缀
phpEnv 的 php.ini 通常位于 PHP 安装根目录下(如 C:\phpEnv\php\php-8.1.22-nts-x64\php.ini),编辑时注意:Windows 下 extension 行不写 .dll,写了反而报错或静默失效。
在文件末尾追加这两行(顺序无关,但建议都加上):
立即学习“PHP免费学习笔记(深入)”;
extension=sqlsrv extension=pdo_sqlsrv
常见错误包括:
- 写成
extension=php_sqlsrv_81_nts_x64.dll→ PHP 启动失败,错误日志里出现Unable to load dynamic library - 只启用了
pdo_sqlsrv却没启sqlsrv→ PDO 连接能建,但部分底层函数(如sqlsrv_errors())不可用 - 改了 php.ini 但没重启 phpEnv 服务 → 用
php -m验证时仍看不到扩展,实际是缓存旧配置
连接 SQL Server 时 localhost 不等于 127.0.0.1,命名实例必须转 IP+端口
Windows 下用 phpEnv 连本地 SQL Server,很多人卡在“连不上”,根本原因不是密码错,而是地址写法违规。
SQL Server 的 .\SQLEXPRESS 或 localhost\SQLEXPRESS 在 PHP 的 sqlsrv 扩展里完全不识别——它不走命名管道,只走 TCP/IP,且不解析实例名。
- 必须用
127.0.0.1:1433(默认端口)或具体 IP+端口,例如192.168.1.100:1433 - 确保 SQL Server 配置管理器中已启用 TCP/IP 协议,并确认监听端口(右键 TCP/IP → 属性 → IP 地址标签页 → IPAll 下的 TCP Port)
- 如果用的是 Express 版且端口是动态分配的(TCP Dynamic Ports 非空),请清空该字段,填死 TCP Port,否则每次重启 SQL Server 端口都变
- 连接字符串推荐用 PDO 方式,显式控制加密行为:
$dsn = "sqlsrv:server=127.0.0.1;Database=testdb;Encrypt=0;TrustServerCertificate=1";(本地开发可关加密;生产必须设Encrypt=1并配证书)
ODBC 驱动是底层依赖,缺了扩展照样加载失败
即使 DLL 放对、php.ini 写对、重启也做了,php -m 仍不显示 sqlsrv?大概率是缺 Microsoft ODBC Driver for SQL Server。
sqlsrv 扩展不是纯 PHP 实现,它依赖系统级 ODBC 驱动通信。phpEnv 自身不附带这个驱动,必须单独安装。
- 去微软官网下载最新版
msodbcsql.msi(如msodbcsql_18.msi),运行安装(全程下一步即可) - 安装后检查注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers是否存在ODBC Driver 18 for SQL Server - 若已装旧版(如 v17),建议卸载后再装 v18,避免版本冲突导致
sqlsrv_connect()返回 false 且无明确错误信息 - 验证是否生效:写个最简脚本,仅调用
sqlsrv_connect('127.0.0.1', ['Database'=>'master']),失败时用print_r(sqlsrv_errors());查真实报错,比盲猜高效得多
最容易被忽略的一点:phpEnv 没有全局 PATH 集成,ODBC 驱动装完后无需重启系统,但必须确保 phpEnv 启动的进程能读到新注册的驱动——通常只需重启 phpEnv 控制台或服务即可,不用重开整个命令行窗口。



















