问题加载SQL DLL PHP 5.6.32

时间:2017-12-10 17:53:09

标签: php sql-server azure dll azure-sql-database

我一直在尝试在PHP脚本和Microsoft Azure SQL数据库之间建立连接,但仍然遇到同样的问题。我已经尝试了Xampp version 7.1.11 / PHP 7.1.11, 7.0.25 / PHP 7.0.25,现在我正在使用5.6.32 / PHP 5.6.32。

我已经安装了Microsoft Drivers for PHP for Microsoft SQL Server,并使用了SQLSRV32.EXE版本5.6.32,该版本已添加到C:\xampp\php\ext文件夹中。

当我编辑php.ini文件以在php错误日志文件中添加extension=php_sqlsrv_56_nts.dll保存并重新启动apache时,我一直收到错误

PHP Warning: PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_sqlsrv_56_nts.dll' - The specified module could not be found. in Unknown on line 0

我尝试过的每个版本的XAMPP都是这样做的。任何人都可以提供一个想法或一手可以解决这个问题,并使用PHP完成我的SQL连接到Azure SQL数据库吗?

2 个答案:

答案 0 :(得分:1)

首先,打开phpinfo()并搜索线程安全行。如果它显示为启用,那么您应该使用线程安全DLL。

enter image description here

答案 1 :(得分:1)

因此,经过进一步的修补和研究,我终于解决了上面提到的问题。不幸的是,常见的谷歌搜索提供了这个Microsoft Drivers for PHP for SQL Server,它只包含PHP版本7.0.XX以前的驱动程序。对于PHP Version 7.1.12,我已使用此处Microsoft Drivers 4.3 for PHP for SQL Server中的thread safe1 php_sqlsrv_71_ts_x64.dll。我不知道为什么再花三天时间才找到这个。

现在可以使用与Azure SQL数据库的连接,步骤如下所述。
1.从Microsoft获取正确的SQL驱动程序      - 如果您使用的是PHP 7.0或更早版本,则可以找到驱动程序Here
     - 如果您使用的是PHP版本7.1,则可以找到驱动程序Here
2.安装Microsoft ODBC Driver 13 for SQL Server
3.将所需的.dll's安装到php\ext文件夹。 eg. C:\php\ext
4.编辑php.ini文件,确保extension_dir=指向您放置下载的C:\php\ext(驱动程序)的.dll's文件夹。
5.将extension=required .dll name添加到大约890行的php.ini文件中。在我的情况下,这是extension=php_sqlsrv_71_ts_x64.dll
6.保存php.ini并重新启动Apache

我用来测试我的连接的PHP脚本如下:
sqltest.php

    $connectionInfo = array("UID" => "USERNAME", "pwd" => "PASSWORD", "Database" => "DBNAME", "LoginTimeout" => 30, "Encrypt" => 1, "TrustServerCertificate" => 0);
    $serverName = "SERVERNAME";
    $conn = sqlsrv_connect($serverName, $connectionInfo);

    if (sqlsrv_errors($conn)) {
        die('Failed to connect to Azure SQL: '.sqlsrv_errors());
    } else {
        echo "Connection to Microsoft Azure SQL Server has succeeded! <br /><br />";
    }

    $tsql = "SELECT * FROM [Users];";
    $getResults = sqlsrv_query($conn, $tsql);
    echo ("Reading data from table <br />" . PHP_EOL);

    if ($getResults == FALSE)
        echo(sqlsrv_errors());
    while ($row = sqlsrv_fetch_array($getResults, SQLSRV_FETCH_ASSOC)) {
        echo ($row['Id'] . " " . $row['Name'] . " " . $row['Username'] . " " . $row['Password'] . "<br /> " . PHP_EOL);
    }
    sqlsrv_free_stmt($getResults);
    ?>

更多信息由Microsoft Here

提供

再次感谢上述所有人提供的有用帮助。