通过PHP,SQL STATE IM004,SQL_HANDLE_ENV上的驱动程序SQLAllocHandle与SQL Server的连接错误失败

时间:2018-02-12 09:12:54

标签: php sql-server windows xampp

我已经搜索并搜索了我的问题,但我仍然没有找到答案。我的问题是当通过PHP PDO / ODBC连接连接到我的SQL Server数据库时,我总是收到错误:“ [Microsoft] [ODBC驱动程序管理器] SQL_HANDLE_ENV上的驱动程序SQLAllocHandle失败,SQLConnect中的SQL状态IM004 ” 。但是我与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更新有关。我真的不知道。

对不起我的英语,非常感谢你的帮助。我真的赞成任何答案

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,以下是我为确保其正常工作所采取的步骤:

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

1)下载了用于SQL Server 5.3的Microsoft PHP驱动程序,并将以下文件放在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),这给了我一个“驱动程序在SQL_HANDLE_ENV上的SQLAllocHandle失败”错误。您不需要将dll放在ext目录中,因为在PHP 7中它是内置的,但您确实需要将该行放入ini文件中。

3)下载并安装了用于SQL Server 17的Microsoft ODBC驱动程序。

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