PHP+SQL Server,SQL工作,但服务器响应中设置了RESET标志


PHP + SQL Server, SQL works but RESET flag being set in server response

在使用Apache web服务器的Windows机器上使用PHP和SQL Server的PDO扩展时,我遇到了一些奇怪的行为。我在/php/ext中添加了必要的.dlls来启用扩展,phpinfo显示sqlsrv已经安装/加载。我还安装了SQL Server本机客户端。但是,当访问仅连接到SQL Server数据库并执行简单INSERT查询的页面时,web服务器会返回错误ERR_CONNECTION_RESET。我检查了数据包,重置标志正在设置;我还检查了数据库,INSERT查询确实成功执行了,添加了新行,但由于某种原因,web服务器正在设置Reset标志。有人知道这里发生了什么吗?

Edit:看起来INSERT或UPDATE语句可以工作,但SELECT语句会导致ERR_CONNECTION_RESET标志。

没有正在运行的防病毒软件,也没有代理,并且如果生成INSERT查询的代码被注释掉,则页面加载时没有ERR_CONNECTION_RESET

就其价值而言,以下是代码:

// This does not cause the ERR_CONNECTION_RESET error
$pdo = new PDO('sqlsrv:Server=' . $host . ';Database=' . $database, $user, $pass);
$stmt = $pdo->prepare("INSERT INTO Table1 (Col1, Col2) VALUES ('test', 4)");
$stmt->execute();
// This causes the ERR_CONNECTION_RESET error
$pdo = new PDO('sqlsrv:Server=' . $host . ';Database=' . $database, $user, $pass);
$stmt = $pdo->prepare("SELECT Col1, Col2 FROM Table1");
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

我发现了这个问题。在查看Windows事件日志后,我注意到一些与Apache可执行文件相关的条目。在这些条目中,php.dll被标记为故障模块。我用在另一台计算机上运行的.dll替换了它,我不再遇到这个错误。

错误的PHP.dll导致Apache服务器崩溃,从而导致服务器错误

"Reformed"答案让我找到了90%的解决方案。最后10%涉及不同的dll。

我有Apache 2.4和PHP 5.5在Windows 10上运行,用于开发系统。我在事件日志中收到的投诉涉及"sqlncli10.dll"文件。在谷歌上搜索"apache连接重置sqlncli10.dll",得到了这个web资源:Rob's Area for PHP on Windows。上面有一个指向OneDrive公共文件的链接:适用于PHP的SQL驱动程序的MS OneDrive文件夹。

我安装了在那里找到的MSI(在扫描了恶意软件等之后),它为我解决了连接重置问题。