【问题标题】:Using PDO SQLSRV with PHP not working将 PDO SQLSRV 与 PHP 一起使用不起作用
【发布时间】: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下应该是mysqlsqlsrv,但我只看到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/…

标签: php pdo sqlsrv


【解决方案1】:

我终于能够弄清楚并让它发挥作用。我尝试安装需要 Composer 的 CakePHP。因此,在安装 Composer 时,我遇到了一个我以前从未见过的错误,并发布了一个关于该问题的问题。最终结果是我不得不重新干净地重新安装 PHP,然后更新 php.ini,所以只有 TS 版本的 PDO SQLSRV。

另一个问题是here

【讨论】:

    【解决方案2】:

    如果有人偶然发现这一点,如果你不取消注释 php.ini 中的 ext dir conf,它将不会加载模块,看起来很简单,但很多人(包括我)注意到了,我希望 PHP 会查看它的默认目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多