通过 PHP、SQL STATE IM004 连接到 SQL Server 时出错,驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败
Posted
技术标签:
【中文标题】通过 PHP、SQL STATE IM004 连接到 SQL Server 时出错,驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败【英文标题】:Connection error to SQL Server via PHP, SQL STATE IM004, Driver's SQLAllocHandle on SQL_HANDLE_ENV failed 【发布时间】: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 更新有关。我真的不知道。
对不起我的英语语言,非常感谢您的帮助。我真的很感激任何答案
【问题讨论】:
【参考方案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.dll2) 将以下行添加到我的 c:\xampp\php 中的 php.ini 文件
-
extension=php_pdo.dll
extension=php_sqlsrv_72_ts_x86.dll
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'以上是关于通过 PHP、SQL STATE IM004 连接到 SQL Server 时出错,驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败的主要内容,如果未能解决你的问题,请参考以下文章