如何在PHP中使用SQLSRV扩展,因为MSSQL已被弃用?

27

我升级到了PHP 5.3,发现php_mssql.dll缺失。经过一些搜索,看起来5.3已经不再支持mssql。所以我从微软下载了驱动程序,但似乎无法使其工作。

我在Windows系统上。当我将文件解压到我的PHP 5.3的ext目录后,我需要做什么?

3个回答

38

引用自http://php.net/manual/en/intro.mssql.php:

在使用 PHP 5.3 或更高版本的 Windows 上,MSSQL 扩展程序已经不再可用。 Microsoft 提供了 SQLSRV,这是 MS SQL 的替代驱动程序: » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx.

下载完成后,请按照此页面上的说明进行操作:

简而言之:

将驱动程序文件放入 PHP 扩展目录中。
修改 php.ini 文件以包含驱动程序。例如:

extension=php_sqlsrv_53_nts_vc9.dll  

重新启动Web服务器。

另请参阅(从该页面复制):

SQLSRV扩展的PHP手册位于http://php.net/manual/en/sqlsrv.installation.php,提供以下安装指南:

通过将适当的DLL文件添加到您的PHP扩展目录并将相应条目添加到php.ini文件来启用SQLSRV扩展。 SQLSRV下载附带多个驱动程序文件。使用哪个驱动程序文件取决于3个因素:您正在使用的PHP版本、您是否使用线程安全或非线程安全的PHP以及您的PHP安装是否使用VC6或VC9编译器编译。例如,如果您正在运行PHP 5.3,您正在使用非线程安全的PHP,并且您的PHP安装是使用VC9编译器编译的,则应使用php_sqlsrv_53_nts_vc9.dll文件。 (如果您正在使用IIS作为Web服务器,则应使用使用VC9编译器编译的非线程安全版本)。如果您正在运行PHP 5.2,您正在使用线程安全的PHP,并且您的PHP安装是使用VC6编译器编译的,则应使用php_sqlsrv_52_ts_vc6.dll文件。

这些驱动程序也可用于PDO


1
好的,搞定了。看起来他们已经重命名了所有的函数 :( 我需要为Windows和Linux使用不同的函数调用吗?就像旧的mssql_*适用于Linux,而sqlsrv_*适用于Windows一样? - user187809
@user187809 SQLSRV扩展仅兼容PHP运行在Windows操作系统中。 - Gordon
我们不能在SQLSRV扩展中使用mssql_connect和其他mssql_(x)函数吗?因为我已经用PHP4开发了一个应用程序,现在我们升级到了PHP 5.3.x版本。 - Prabu

5

下载Microsoft Drivers for PHP for SQL Server。解压文件并使用以下之一:

File                             Thread Safe         VC Bulid
php_sqlsrv_53_nts_vc6.dll           No                  VC6
php_sqlsrv_53_nts_vc9.dll           No                  VC9
php_sqlsrv_53_ts_vc6.dll            Yes                 VC6
php_sqlsrv_53_ts_vc9.dll            Yes                 VC9

你可以在phpinfo()中查看线程安全状态。
将正确的文件添加到您的ext目录中,并将以下行添加到您的php.ini中:
extension=php_sqlsrv_53_*_vc*.dll

请使用您所使用的文件的文件名。
正如Gordon已经发布的那样,这是Microsoft的新扩展程序,并使用sqlsrv_* API而不是mssql_*。
更新: 在Linux上,您没有必要的驱动程序,也没有SQLSERV扩展程序。 请查看Connect to MS SQL Server from PHP on Linux?以了解此问题的讨论。
简而言之,在Linux上,您需要安装FreeTDS 并且需要使用mssql_*函数请参见更新2 为了长期简化事情,我建议创建一个包装器类,其中包含使用适当的API(sqlsrv_*或mssql_*)的必要函数,具体取决于加载哪个扩展程序。
更新2: 您无需在Linux上使用mssql_*函数即可连接到ms sql server。您可以使用PDO + ODBC + FreeTDS进行连接。在Windows上,连接的最佳性能方法是通过PDO + ODBC + SQL Native Client,因为PDO + SQLSRV驱动程序可能会非常慢。

1
Linux和Windows怎么办?我需要为不同的操作系统使用不同的函数调用吗? - user187809
1
Microsoft的SQLSRV扩展仅适用于Windows。如果要从Linux Web服务器使用MS SQL Server,则需要使用第三方驱动程序,因为Microsoft不提供此功能。请参考此问题https://dev59.com/8kbRa4cB1Zd3GeqP0G7f。 - danishgoel

0

请确保在此处下载SQL驱动程序https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver15

然后将与您的php版本相同版本的两个文件移动到其中。(检查php -v)

在我的情况下,我使用的是7.4.30版本,并将php_pdo_sqlsrv_74_nts_x64.dll和php_sqlsrv_74_nts_x64.dll移动到了我的php文件夹ext中

C:\Program Files\php7.4.30\ext

然后打开你的php.ini文件并添加扩展,记得在扩展名中包含".dll"。

extension=php_pdo_sqlsrv_74_nts_x64.dll
extension=php_sqlsrv_74_nts_x64.dll

如果您仍然遇到问题,请前往php.ini中的extension dir =“ext”并将ext替换为您的ext文件夹的确切路径,例如:
extension_dir = "C:\Program Files\php7.4.30\ext\"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接