查看已安装的php版本(重要,如果版本和所下载的.dll文件不匹配,配置后仍然会无效)
下载并直接安装微软提供的官方ODBC驱动(必须,否则配置失效):
https://docs.microsoft.com/zh-cn/sql/connect/odbc/windows/release-notes-odbc-sql-server-windows?view=sql-server-ver15#13根据php版本号,查看并下载微软提供的官方MSSQL扩展:
https://docs.microsoft.com/zh-cn/sql/connect/php/release-notes-php-sql-driver?view=sql-server-ver15
得到.exe压缩包(又称SQLSRV驱动程序)-
直接解压该压缩包,得到一些.dll扩展文件,可能如下图所示(版本号会有所不同):
此压缩包中提供两种文件:pdo_sqlsrv类型驱动程序(如:图中前四个.dll文件)和sqlsrv类型驱动程序(如:图中后四个.dll文件)。从两种类型各选择一个与当下php运行环境相匹配的.dll文件,粘贴进php的ext文件夹中。
-
.dll文件选择须知:
- 为什么要两种驱动程序中各选一个并同时使用?
答:sqlsrv 驱动程序用于提供与 SQL Server 交互的过程接口,pdo_sqlsrv 驱动程序用于实现 PHP面向对象的PDO接口,用于处理数据库 - TS类型驱动程序和NTS类型驱动程序应该选哪个?
答:TS(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时进行数据加锁保护,其他线程不能同时进行访问该数据,直到该线程读取完毕,其他线程才可访问使用该数据,好处是不会出现数据不一致或者数据污染的情况,坏处是耗费的时间要比 NTS 长。PHP以 ISAPI 方式(Apache 常用方式)加载的时候选择TS版本。NTS: NTS(None-Thread Safe)即非线程安全,不提供数据访问保护,有可能出现多个线程先后或同时操作同一数据的情况,坏处是容易造成数据错乱(即脏数据),好处是一般操作执行时间比 TS 短
- 为什么要两种驱动程序中各选一个并同时使用?
根据上条原则,我的电脑是x64系统,于是选择
php_sqlsrv_7_ts_x64.dll
文件和php_pdo_sqlsrv_7_ts_x64.dll
文件。接下来,修改php的php.ini
文件,在其中增加扩展连接并保存修改:
extension=php_sqlsrv_7_ts_x64.dll
extension=php_pdo_sqlsrv_7_ts_x64.dll重启Apache服务,使用
phpinfo()
函数检查输出是否成功
原文链接:https://blog.csdn.net/Tuimaohenyouya/article/details/137766107