加载用于 SQL Server 的 PHP Microsoft 驱动程序

下载 PHP 驱动程序

本页介绍了如何将 Microsoft Drivers for PHP for SQL Server 加载到 PHP 进程空间中。

可以从 Microsoft Drivers for PHP for SQL Server GitHub 项目页下载适用于你的平台的预生成驱动程序。 每个安装包都包含 SQLSRV 和PDO_SQLSRV线程和非线程变体中的驱动程序文件。 在 Windows 上,它们也可用于 32 位和 64 位变体。 有关每个包中包含的驱动程序文件的列表,请参阅 Microsoft Drivers for PHP for SQL Server 系统要求。 驱动程序文件必须与 PHP 环境的 PHP 版本、体系结构和线程性匹配。

在Linux和macOS上,你也可以按照 安装教程中描述的,使用PIE或PECL安装驱动。

在 Windows 版本 5.13.3 及以后版本中,你可以用 PIE(PHP 扩展安装程序)安装驱动程序。 PIE 取代了已弃用的 PECL 包系统,并且会为你启用扩展,这样你就不用下载驱动文件或手动编辑 php.ini 。 Windows不需要构建工具链,因为扩展以预编译的DLL形式分发。 PIE 本身需要 PHP 8.1 及以上版本才能运行,尽管它可以在机器上的其他 PHP 安装中安装扩展。

pie install microsoft/sqlsrv
pie install microsoft/pdo_sqlsrv

使用各自的命令安装每个驱动程序。 有关安装PIE的说明,请参见 PIE文档

在 Windows 上,PIE 需要扩展openssl才能访问包仓库。 通过 php.net 的 .zip 包安装的 PHP 会使用默认的 php.ini-development 文件,而该文件并未启用该功能,因此 PIE 会在 The package "composer/ca-bundle" requires the extension "openssl" 处停止。 在运行 PIE 之前,先在 php.ini 中设置extension_dir并启用扩展:

extension_dir = "ext"
extension=openssl

在 Linux 和 macOS 上,通过软件包管理器安装的 PHP 已默认启用 openssl,因此此步骤仅适用于 Windows。

还可以在构建 PHP 时或使用 phpize 从源生成驱动程序。 如果选择从源生成驱动程序,则可以通过在生成 PHP 时将 --enable-sqlsrv=static --with-pdo_sqlsrv=static(在 Linux 和 macOS 上)或 --enable-sqlsrv=static --with-pdo-sqlsrv=static(在 Windows 上)添加到 ./configure 命令来将驱动程序静态生成到 PHP 中,而不是将它们生成为共享扩展。 有关 PHP 生成系统和 phpize 的详细信息,请参阅 PHP 文档

将驱动程序文件移动到扩展目录中

驱动程序文件必须位于 PHP 运行时可以找到它的目录中。 将驱动程序文件放在默认的 PHP 扩展目录中是最简单的选择。要查找默认目录,请在 Windows 上运行php -i | sls extension_dir,或在 Linux/macOS 上运行php -i | grep extension_dir。 如果不使用默认扩展目录,请使用 extension_dir 选项在 PHP 配置文件(php.ini)中指定目录。 例如,在 Windows 上,如果将驱动程序文件 c:\php\ext 放在目录中,请将以下行添加到 php.ini:

extension_dir = "c:\PHP\ext"

在 PHP 启动时加载驱动程序

若要在 PHP 启动时加载 SQLSRV 驱动程序,首先要将驱动程序文件移动到扩展目录中。 然后,按如下步骤操作:

  1. 若要启用 SQLSRV 驱动程序,请将以下行添加到扩展部分来修改 php.ini ,根据 PHP 版本和线程安全与非线程安全安装更改文件名:

    在 Windows 上:

    extension=php_sqlsrv_83_ts.dll
    

    在 Linux 上,如果为您的发行版下载了预构建的二进制文件:

    extension=php_sqlsrv_83_nts.so
    

    如果你是从源码编译了 SQLSRV 二进制文件,或者用 PIE 或 PECL 安装,它的名字是 sqlsrv.so:

    extension=sqlsrv.so
    
  2. 要启用 PDO_SQLSRV 驱动程序,PHP 数据对象 (PDO) 必须可用作内置扩展,或用作动态加载的扩展。

    在 Windows 上,预生成的 PHP 二进制文件附带了 PDO 内置文件,因此无需修改 php.ini 即可加载它。 但是,如果从源编译 PHP 并指定要生成的单独的 PDO 扩展,其名称为 php_pdo.dll,并且必须将它复制到扩展目录,并将以下行添加到 php.ini:

    extension=php_pdo.dll
    

    在 Linux 上,如果使用系统的包管理器安装了 PHP,则 PDO 可能安装为名为 pdo.so 的动态加载扩展。 必须在PDO_SQLSRV扩展之前加载 PDO 扩展,否则加载将失败。 扩展是使用单个 .ini 文件加载的,这些文件在 php.ini后读取。 因此,如果通过其自己的 .ini 文件加载 pdo.so,则需要一个可在 PDO 之后加载 PDO_SQLSRV 驱动程序的单独文件。

    要查找扩展特定的 .ini 文件位于哪个目录,请运行 php --ini 并记下 Scan for additional .ini files in: 下列出的目录。 查找加载 pdo.so 的文件。 它应以数字为前缀,例如 10-pdo.ini。 数字前缀指示 .ini 文件的加载顺序,而没有数字前缀的文件按字母顺序加载。 创建一个文件以加载 PDO_SQLSRV 驱动程序文件,文件名可以是 30-pdo_sqlsrv.ini(任何大于 pdo.ini 前缀数字的数值均可)或 pdo_sqlsrv.ini(如果 pdo.ini 前面没有数字前缀),并在其中添加以下行,同时根据实际情况修改文件名:

    extension=php_pdo_sqlsrv_3_nts.so
    

    和 SQLSRV 一样,如果你是从源码编译PDO_SQLSRV二进制文件,或者用 PIE 或 PECL 安装,它的名称是 pdo_sqlsrv.so:

    extension=pdo_sqlsrv.so
    

    将此文件复制到包含其他 .ini 文件的目录中。

    如果使用内置 PDO 支持从源编译 PHP,则不需要单独的 .ini 文件,并且可以将上一行添加到 php.ini。

  3. 重新启动 Web 服务器。

注意事项

若要确定驱动程序是否已成功加载,请运行调用 phpinfo() 的脚本。

有关 php.ini 指令的详细信息,请参阅核心 php.ini 指令说明