【发布时间】:2020-05-27 23:08:04
【问题描述】:
我一直试图让 PDO SQLSRV 工作(在 Windows Server 2012 R2 中) 有一段时间了,我找到了instructions 我应该如何设置它驱动程序在启动 PHP 时加载,但它不工作。
我找到了正确的 php.ini 文件(并通过注释掉其他一些 PDO 驱动程序来确保进行测试)。我在[ExtensionList] 的末尾添加了适当的行,如下所示:
extension=php_pdo_sqlsrv_7_ts_x64.dll
我添加了其中的几个,但没有任何效果。我通过运行带有phpinfo() 的脚本来检查它,以向我展示发生了什么。扩展列表如下所示:
[ExtensionList]
; extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_pdo_mysql.dll
; extension=php_pdo_sqlite.dll
extension=php_imap.dll
extension=php_tidy.dll
extension=php_pdo_sqlsrv_7_ts_x64.dll
extension=php_sqlsrv_7_ts_x64.dll
extension=php_pdo_sqlsrv_7_nts_x64.dll
extension=php_sqlsrv_7_nts_x64.dll
extension=php_pdo_sqlsrv_72_ts_x64.dll
extension=php_sqlsrv_72_ts_x64.dll
extension=php_pdo_sqlsrv_72_nts_x64.dll
extension=php_sqlsrv_72_nts_x64.dll
extension=php_pdo_sqlsrv_72_ts.dll
extension=php_sqlsrv_72_ts.dll
所以在PDO下应该是mysql和sqlsrv,但我只看到mysql。
我错过了什么吗?
更新
我尝试更新 php.ini 文件,使其具有这些扩展的完整路径,但仍然没有任何区别。
架构=x64,线程安全=禁用,PHP 版本=7.2.2,Microsoft ODBC Driver 17 for SQL Server
更新二
我已尝试删除除我需要的 2 之外的所有引用,并为它们提供完全限定的目录路径:
[ExtensionList]
; extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
; extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
extension="C:\Program Files\PHP\v7.2\ext\php_pdo_sqlsrv_72_nts_x64.dll"
extension="C:\Program Files\PHP\v7.2\ext\php_pdo_sqlsrv_7_nts_x64.dll"
extension=php_pdo_sqlsrv.dll
extension=php_imap.dll
extension=php_tidy.dll
我仍然无法让 SQL SRV 工作,它仍然没有显示在 PHPInfo 打印输出中。
还有什么我可以尝试的其他建议吗?
更新
昨天我从here 重新安装了PHP 7.2(现在是7.2.6 版)。并从here 重新安装了 Microsoft Drivers 5.2 for PHP for SQL Server。并像这样更新了我的 php.ini 文件:
[ExtensionList]
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_imap.dll
extension=php_tidy.dll
extension=php_pdo_sqlsrv.dll
extension="C:\Program Files\PHP\v7.2\ext\php_pdo_sqlite.dll"
; extension=php_pdo_mysql.dll
extension=php_mysqli.dll
看看这是否会有所帮助或有所作为。 php_pdo_sqlsrv.dll 仍然没有加载,然后php_pdo_sqlite.dll 确实加载了,它们都与也加载的 php_mysqli.dll 位于同一文件夹中。我已按照我找到的here 的说明进行操作,但似乎没有任何工作可以加载该 SQL SRV dll。
【问题讨论】:
-
@Zhorov Architecture=x64, Thread Safety=disabled, PHP Version=7.2.2
-
@Zhorov 我不知道,我该如何检查?
-
@Zhorov 它已安装。我不知道是什么版本,但是当我刚才尝试安装 ODBC 驱动程序 13.1 时,我收到一条消息,指出已经安装了更高版本。
-
IIS 日志文件中是否有任何错误?
-
我认为你必须使用php_pdo_sqlsrv_72_nts_x64.dll。您还需要 Microsoft ODBC Driver 17 for SQL Server,64 位安装。检查这个:docs.microsoft.com/en-us/sql/connect/php/…