我已经搜索并搜索了我的问题,但我仍然没有找到答案。我的问题是当通过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";
}
上述结果显示为:
我尝试重新安装XAMPP并复制新的PHP SQL Server库。但错误仍然相同。正如我上面提到的,我一直在寻找解决方案,但仍然没有运气。我真的希望,我可以为我的问题找到解决方案,或者至少是我开始使用的线索。哦,是的,我差点忘了,这个错误发生在Windows 10更新之后,在此之前,我与SQL Server的连接没问题。所以,我想知道这个问题是否与Windows更新有关。我真的不知道。
对不起我的英语,非常感谢你的帮助。我真的赞成任何答案
答案 0 :(得分:1)
我遇到了同样的问题,以下是我为确保其正常工作所采取的步骤:
我的配置(Win10,XAMPP,PHP 7.2.8)
1)下载了用于SQL Server 5.3的Microsoft PHP驱动程序,并将以下文件放在C:\ xampp \ php \ ext目录中:
2)在c:\ xampp \ php
中的php.ini文件中添加了以下几行注意:我最初缺少第一行(extension = php_pdo.dll),这给了我一个“驱动程序在SQL_HANDLE_ENV上的SQLAllocHandle失败”错误。您不需要将dll放在ext目录中,因为在PHP 7中它是内置的,但您确实需要将该行放入ini文件中。
3)下载并安装了用于SQL Server 17的Microsoft ODBC驱动程序。
确保在进行更改后停止并重新启动Apache服务器。