PHP + SQL 服务器,SQL 有效但在服务器响应中设置了 RESET 标志

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

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

编辑:似乎 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。

我在 Windows 10 上有 Apache 2.4 和 PHP 5.5 运行 作为开发系统。我在事件日志中收到的投诉涉及 "sqlncli10.dll" 文件。谷歌搜索 "apache connection reset sqlncli10.dll" 导致此网络资源:Rob's Area for PHP on Windows. On it was a link to a OneDrive public file: MS OneDrive Folder of SQL drivers for PHP

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