通过PDO连接到SQL Server 2005

我使用微软的Web Platform Installer 4.6将我的PHP安装升级到了5.4.14。

Php工作得很好,除非我无法连接到我的数据库。

升级之前,我的连接工作很好,但现在不能工作。 这是我的连接string,其中1.1.1.1是我的真实IP地址:

$db = new PDO("odbc:DRIVER={SQL Server};SERVER=1.1.1.1;DATABASE=TEST;charset=utf8", "TEST", "Password"); 

这会导致浏览器popup一个页面,显示“服务器错误”,但我的错误日志保持为空。 在我的php.ini文件中,我有这些行:

 extension=php_pdo_sqlsrv.dll extension=php_sqlsrv.dll extension=php_sqlsrv_53_nts_vc6.dll 

这些扩展名不会显示在我的phpinfo.php页面上。 我的“extension_dir”variables被设置为正确的目录。

更新:现在我的错误日志正在填充(原因未知),我得到这个错误:

 PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Program Files\PHP\v5.4\ext\php_pdo_sqlsrv.dll' - The specified module could not be found. 

我无法得到一个SQL连接的PHP 5.4.14工作,但我能降级到5.3,并得到它的工作。 我一路上学到了很多东西,我想在这里贴出来帮助其他人。

关于我的环境:位于另一台计算机上的Windows Server 2003 IIS版本6.0 SQL Server 2005。

安装PHP 5.3.xx的说明:1.卸载您以前使用的任何php版本。 您可以同时安装多个PHP版本。

  1. 安装Microsoft的Web平台安装程序4.6。 http://www.microsoft.com/web/downloads/platform.aspx

  2. 一旦安装,运行它,并转到应用程序选项卡。
    – search“PHP”。 – 安装PHP版本5.3.xx和“在Microsoft IIS驱动程序PHPv5.3 for SQL服务器”

  3. http://www.microsoft.com/en-us/download/details.aspx?id=20098下载“用于SQL Server的Microsoft驱动程序3.0”,SQLSRV20.EXE。 这是非常重要的,您selectSQLSRV20.EXE包而不是SQLSRV30.EXE包。 在任何地方“安装”SQLSRV20.EXE软件包。 您将在步骤5中从该目录复制两个驱动程序。 注意:对于任何下载SQLSRV30.EXE进行其他安assembly置并且出现错误“SQLSRV30.EXE不是有效的Win32应用程序”的用户,可以使用7-zip解压缩并解压缩它的内容。 (您可以将.exe视为一个存档。)

  4. 导航到您的PHP安装目录(在我的情况下,C:\ PHP \ v5.3)。 然后进入“ext”目录。
    – 删除两个文件:“php_pdo_sqlsrv.dll”和“php_sqlsrv.dll” – 从安装了SQLSRV20.EXE软件包的目录中复制这两个文件“php_pdo_sqlsrv_53_nts_vc9.dll”和“php_sqlsrv_53_nts_vc9.dll”。
    注意:在驱动程序的文件名中,“nts”表示“非线程安全”,vc9是用于编译驱动程序/ php的环境,“53”与正在使用的php版本相关这种情况下,PHP版本5.3.whatevertheminorversionis)。 您应该始终在Windows中安装非线程安全版本。 微软的Web平台安装程序为你做这个。

  5. 打开你的php.ini文件(位于安装PHP的根目录下,在我的情况下,这是C:\ PHP \ v5.3 \ php.ini)删除这两行文件即将结束:

    延长= php_sqlsrv.dll

    延长= php_pdo_sqlsrv.dll

    并添加这两行:

    延长= php_sqlsrv_53_nts_vc9.dll

    延长= php_pdo_sqlsrv_53_nts_vc9.dll

  6. 在IIS中,将php应用程序添加到池中(如果尚未完成),请右键单击池并点击回收站。 你应该很好走!
    您也可以尝试重新启动IISpipe理服务

疑难解答我运行我的phpinfo.php页面的应用程序不在php应用程序池中。 它在一个ASP.net应用程序池下运行。 将我的php应用程序移动到自己的池中并重新启动应用程序池后,SQL驱动程序出现。

您可能需要在C:\ WINDOWS \ system32 \ inetsrv中configurationfcgiext.ini文件。 在types部分下,你应该列出类似“php = PHP53_via_FastCGI”,然后是“[PHP53_via_FastCGI] ExePath = C:\ Program Files \ PHP \ v5.3 \ php-cgi.exe”

“php = PHP53_via_FastCGI”应该与IIS中所需的PHP安装相关联。 如果您有另外一节“PHP54_via_FastCGI”,并且您想使用PHP 5.4作为页面,那么您应该将此值更改为“php = PHP53_via_FastCGI”。