【问题标题】:Connection error to SQL Server via PHP, SQL STATE IM004, Driver's SQLAllocHandle on SQL_HANDLE_ENV failed通过 PHP、SQL STATE IM004 连接到 SQL Server 时出错,驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败
【发布时间】:2018-07-22 09:49:23
【问题描述】:

我已经搜索并搜索了我的问题,但我仍然没有找到答案。我的问题是当通过 PHP PDO/ODBC 连接连接到我的 SQL Server 数据库时,我总是收到错误消息:“[Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed, SQL state IM004 in SQLConnect” .但是我与 Oracle 或 MySQL 数据库的连接完全没有问题,只有 SQL Server 数据库。

这是我测试连接的代码:

$dbh = null;
try
{
    $dbh = new PDO('oci:dbname='.TNS, DB_USERNAME, DB_PASSWORD, null);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $pe) {
    //var_dump($pe->getMessage());
}

if (!is_null($dbh)) {
    echo "Oracle Connection success";
}
else {
    echo "Oracle cannot connect";
}
echo "<br />";



$dbh = null;
try
{
    $dbh = new PDO('mysql:host=localhost;dbname=db_test', 'root', '', null);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $pe) {
    //var_dump($pe->getMessage());
}

if (!is_null($dbh)) {
    echo "MySQL Connection success";
}
else {
    echo "MySQL cannot connect";
}
echo "<br />";



$dbh = null;
try
{
    $dbh = new PDO('sqlsrv:server=XXXXX;Database=xxxxxxx', 'xxxx', 'xxxx', null);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $pe) {
    //var_dump($pe->getMessage());
}

if (!is_null($dbh)) {
    echo "MySQL Connection success";
}
else {
    echo "SQL Server cannot connect";
}

上面的结果显示为:

  • Oracle 连接成功
  • MySQL 连接成功
  • SQL Server 无法连接

我尝试重新安装 XAMPP 并复制新的 PHP 的 SQL Server 库。但错误仍然相同。正如我上面提到的,我一直在寻找解决方案,但仍然没有运气。我真的希望,我能为我的问题找到一个解决方案,或者至少给我一个开始的线索。哦,是的,我差点忘了,这个错误发生在 Windows 10 更新之后,在此之前,我与 SQL Server 的连接很好。所以,我想知道这个问题是否与 Windows 更新有关。我真的不知道。

对不起我的英语语言,非常感谢您的帮助。我真的很感激任何答案

【问题讨论】:

    标签: php sql-server windows xampp


    【解决方案1】:

    我遇到了同样的问题,这些是我为确保它正常工作而采取的步骤:

    我的配置(Win10、XAMPP、PHP 7.2.8)

    1) 下载 Microsoft PHP Drivers for SQL Server 5.3 并将以下文件放入 C:\xampp\php\ext 目录:

    • php_sqlsrv_72_ts_x86.dll
    • php_pdo_sqlsrv_72_ts_x86.dll

    2) 将以下行添加到我的 c:\xampp\php 中的 php.ini 文件

    1. extension=php_pdo.dll
    2. extension=php_sqlsrv_72_ts_x86.dll
    3. extension=php_pdo_sqlsrv_72_ts_x86.dll

    注意:我最初错过了第一行 (extension=php_pdo.dll),这给了我一个“驱动程序 SQLAllocHandle on SQL_HANDLE_ENV failed”错误。您不需要将 dll 放在 ext 目录中,因为在 PHP 7 中它是内置的,但您确实需要将该行放在 ini 文件中。

    3) 已下载并安装 Microsoft ODBC Driver for SQL Server 17。

    确保在进行更改后停止并重新启动 Apache 服务器。

    【讨论】:

    • Whoops\Exception\ErrorException:PHP 启动:无法加载动态库 'php_pdo.dll'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2021-08-28
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多