【问题标题】:Getting Microsoft PHP PDO for SQL Server working让 SQL Server 工作的 Microsoft PHP PDO
【发布时间】:2012-03-31 09:19:14
【问题描述】:

我正在尝试让 SQL Server 的 PHP PDO 驱动程序正常工作。我从 Microsoft 获得了文件。

我正在使用 PHP 5.3。我将php_pdo_sqlsrv_53_nts.dll 复制到我的PHP 扩展目录并修改了PHP.INI。错误日志显示

[2012 年 3 月 31 日 20:11:38] PHP 警告:PHP 启动:无法加载动态库 'c:\php\ext\php_pdo_sqlsrv_53_nts.dll' - 找不到指定的模块。
在第 0 行的未知中

该文件确实存在。我用 DEPENDS.EXE 检查了它,发现缺少 MSVCR100.DLLMSVCP100.DLL,我运行了所有 VC++ 运行时包并获得了 DLL。 DEPENDS 报告了两个缺失的依赖项,LINKINFO.DLLIESHIMS.DLL。不确定它们是什么。

我没有PHP_PDO.DLL;从我读到的内容表明 PHP 5.3+ 将 php_pdo.dll 构建到 PHP 中。phpinfo 有一个“PDO”部分,其中有 "PDO drivers" = "no value"。我不确定这个值是否应该是这个值。

我尝试按照另一篇文章中的建议重新启动网络服务器(而不是仅仅重新启动服务),但这并没有解决问题。

在带有 IIS 的 Windows Server 2008 和 x64 上运行。

【问题讨论】:

  • 显示 php.ini 的相关 sn-ps。另外,Apache 还是 IIS? (假设 IIS 因为将 nts 与 Apache 一起使用会很糟糕。)
  • 在对 PHP.ini 进行更改时,您应该始终重新启动您的网络服务器!这不是解决方法,而是常见做法,绝对必要!听起来可能有两个问题。 1) .dll 文件不在正确的位置,或者有轻微的输入错误。你确定它是正确的吗? 2) 您的 PDO 驱动程序也可能未加载。您认为php_pdo.dll 是从 PHP 5.3+ 自动加载到 PHP 中的想法是正确的。您确定使用正确版本的 PHP。我们能看到phpinfo() 的sn-p 吗?
  • @Corbin 很抱歉,我的部分帖子似乎被截断了;它是使用 IIS 在 x64 上运行的 Windows Server 2008。
  • @BenCarey 措辞很糟糕,我尝试重新启动 IIS,这里有另一个帖子,解决方案是重新启动服务器,而不是服务。所以我都尝试了..
  • @BenCarey 更新为在 pastebin.com/H6p9Ra3U 处显示 PHP 信息

标签: php sql-server pdo


【解决方案1】:

同样的问题困扰了2天,终于找到解决办法了。

1.安装PHP:推荐5.3。 (所有与 5.4 相关的 .dll 文件都不起作用!) http://www.php.net/downloads.php
2.下载微软驱动:不要使用3.0,只有2.0的dll文件可以! http://www.microsoft.com/en-us/download/details.aspx?id=20098
3.将驱动程序复制到“ext”文件夹(php 5.3默认,可在php.ini中更改)
4.更新php.ini(使用文本编辑器或PHP管理器) 例如extension=php_pdo_sqlsrv_53_nts_vc9.dll(vc6 不工作!)
5.重启IIS
6.检查 phpinfo() 中的 PDO 支持:“sqlsrv”应该在“启用”列表中。
7.连接字符串:sqlsrv:Server=19x.1xx.1xx.1xx;Database=lab

这是我的环境:Windows 7 + IIS 7 + SQL Server 2008 R2,PHP 5.3

相信 MS 的最新版本是我的错。

【讨论】:

  • php_sqlsrv 与 php_pdo_sqlsrv 不同
【解决方案2】:

之所以说no valuePDO Drivers,只是因为它没有加载任何驱动程序。 php_PDO.dll 只是一个额外的PDO drivers 运行的库,它不是驱动程序。问题仍然存在于您尝试加载的 php_pdo_sqlsrv_53_nts.dll

您提供的phpinfo() 无关紧要,因为我们知道 dll 没有被加载。我们需要弄清楚为什么php_pdo_sqlsrv_53_nts.dll 没有被加载。

在我们继续之前的几个基本步骤:

  1. 文件名确定正确吗?
  2. .dll 确定在正确的位置吗?
  3. 文件是thread-safe 还是non-thread-safe 版本? 这很重要!
  4. 文件下载是否正确?它可能已损坏

【讨论】:

  • 嗨,本。 1. 是的,文件命名正确,2. 它在 /ext/ 目录中,有其他扩展名,3. 它与 PHP5.DLL 链接,并且 phpinfo() 说它不是线程安全的,4. 文件是存档的一部分这将在安装时进行检查。
  • phpinfo() 没有看到.dll 那么它怎么知道文件是否是线程安全的。如果您使用 IIS,您的 PHP 安装将是非线程安全的,这就是您将要阅读的内容。 您需要确保php_pdo_sqlsrv_53_nts.dll 库是非线程安全的,以便它可以与您的PHP 安装一起运行。 看起来这是因为名称中的“nts”。你能解释一下“它与 PHP5.DLL 链接”是什么意思吗?
  • 如果它是线程安全版本,那么当我使用 PHP5TS.DLL 编译时,它会被链接。文件名是 php_pdo_sqlsrv53_nts.dll 100%,我什至复制了文件名并将其粘贴到 php.ini 中以确保我没有睡眼惺忪而遗漏了什么。
  • @Sam 肯定是non-thread safe,所以我们可以排除这个。我需要知道的是“与 PHP4.dll 链接”是什么意思?这应该无关紧要!您需要做的就是浏览到 php.ini 中的文件。您能否将 php.ini 的扩展部分复制并粘贴到您的问题中,以便我仔细检查?
  • 感谢您的帮助。我最终通过使用旧版本的驱动程序来解决它。我注意到 MSFT 文档中的一个尾注说 PDO 库 v3 需要 PHP >= 5.3.6。我现在是 5.3.1,由于与其他一些软件不兼容而无法移动。
【解决方案3】:

我注意到 Microsoft 文档中的一个脚注说,第 3 版 PDS 驱动程序需要 PHP >= 5.3.6。由于我正在运行 5.3.1,而且我无法从中移除,因此较旧的版本可以正常工作,尽管已被弃用。

【讨论】:

    【解决方案4】:

    对该主题的一点帮助:

    如果您碰巧安装了带有 Native Client 11 的现有 SQL Server 2012,则无法在其上安装 Native Client 10,这是官方 PHP 驱动程序所必需的。 一种解决方案是删除 NC 11 和相关组件,然后按此顺序安装 NC 10 和 NC 11,但对于经常使用的服务器来说,这是不可能的。

    解决方法是使用为 NC 11 制作的非官方版本,例如:http://robsphp.blogspot.hu/2012/06/unofficial-microsoft-sql-server-driver.html

    【讨论】:

      【解决方案5】:

      我也有同样的问题。我安装了 SQL Server 2012 客户端软件并修复了它(我已经安装了 SQL 2008 客户端软件)。我相信安装 ODBC“Native Client 11”是解决办法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2016-09-15
        相关资源
        最近更新 更多