使SQL Server的ODBC驱动程序11可用于Azure网站中的PHP


Making ODBC Driver 11 for SQL Server Available For PHP In Azure Website

我有一个在Azure网站中运行WordPress的PHP 5.5网站,配置为使用64位IIS运行,数据库在MySQL中运行。我想将该网站转换为在Azure中使用SQL Server,而不是MySQL。

我已经安装了WP-Db抽象插件,并遵循了它的设置说明。我选择使用sqlsrv驱动程序,所以我安装了Microsoft Drivers for PHP for SQL Server 3.1,并将它们添加到WordPress网站的文件夹中,并将其配置为扩展。在测试页面上调用phpinfo()表明sqlsrv驱动程序已加载到PHP中,并报告PHP是x86。

我还设置了数据库、用户和密码,并测试了我可以使用SQLCMD成功连接到它。

Microsoft Drivers for PHP for SQL Server 3.1指令指出,还需要"Microsoft ODBC Driver 11 for SQL Server version 11"。我已经下载了x64和x86版本,并尝试了相关Windows目录中的DLL,并将它们与两种体系结构的PHP驱动程序一起添加到扩展目录中,但两者都不起作用。

当试图从运行的PHP站点连接到SQL Azure数据库时,我只得到了以下错误:

This extension requires the ODBC Driver 11 for SQL Server. Access the following URL to download the ODBC Driver 11 for SQL Server for x86: http://go.microsoft.com/fwlink/?LinkId=163712

驱动程序的DLL文件,我有相对于WordPress网站根目录:

  • ext'msodbcsql11.dll
  • ext'php_sqlsrv_55_nts.dll
  • ext'1033'msodbcsqlr11.rll

我在Azure管理门户中为应用程序设置的网站设置了以下内容:

PHP_EXTENSIONS:ext'php_sqlsrv_55_nts.dll

我所能想到的是,我要么从ODBC驱动程序中遗漏了一些东西,要么我将如何使它们对PHP驱动程序可用是不正确的。

有人知道我错过了什么吗?或者为什么这不起作用?

下面是我用来测试PHP中SQL Server连接的测试代码。

<?php
$serverName = "MYSERVER.database.windows.net,1433";
$connOptions = array("UID"=>"MYUSERNAME", "PWD"=>"MYPASSWORD");
$conn = sqlsrv_connect( $serverName, $connOptions );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
if( $client_info = sqlsrv_client_info( $conn)) {
    foreach( $client_info as $key => $value) {
        echo $key.": ".$value."<br />";
    }
} else {
    echo "Error in retrieving client info.<br />";
}
?>

我最终并没有找到合适的解决方案,但事实证明,将SQL Server与PHP5.4一起使用的所有部分都已经安装在Azure网站中。

我从PHP 5.5降级到5.4,然后SQL Server连接开始工作。

这不是一个真正的解决办法,但它让我(主要)达到了我想要的位置。