如何在PHP中停止SQL查询执行?

3

我有一个长的SQL查询执行过程。当我关闭浏览器页面时,SQL查询(PostgreSQL)的执行仍在继续。如何停止在关闭页面时执行它?

4个回答

2

你无法保证没有 JavaScript 时会断开连接,确保知道窗口已关闭的唯一真正方法是让它不断地向服务器发送请求 -- 有时页面关闭事件不会触发。因此,你基本上需要在后台跟踪这些请求,如果在给定时间内没有请求,就调用 kill 进程。

据我所知,不可能在不以管理员身份登录并强制关闭威胁的情况下告诉 PostgreSQL 连接。该方法称为 pg_cancel_backend。我不会使用命令行 kill 强制终止进程。通过使用内置工具可以避免可能带来的影响。


背景跟踪是一个有趣的想法,但是后台的 PHP 进程如何知道哪个 PHP 进程与浏览器断开连接了? - fatemaker

1
你需要编写一些 JavaScript 代码,以便在页面关闭时触发 postback 到服务器,从而连接到正在执行的进程并停止它。

只有当浏览器仍在运行时才能正常工作 - 你必须捕获当某人完全关闭浏览器的情况,并且考虑浏览器崩溃的情况(这是 JavaScript 无法做到的)。 - OMG Ponies

0

您可以在服务器上终止该进程。


我想删除这个答案,因为它太过专业,没有回答问题,但是有人投了赞成票。为什么呢? :) - Gedrox
因为这是停止 SQL 数据库进程的唯一方法。应用程序仅发送请求 - 没有交互连接来暂停/等等。 - OMG Ponies
1
@Gedrox 我帮你搞定了。去吧! - user151841
@OMG Ponies 但就像 Gedrox 所说的那样,它并没有回答问题。它没有将问题中的事件——关闭浏览器页面与所需行为联系起来。 - user151841
这个魔术函数怎么样 - http://php.net/manual/en/function.ignore-user-abort.php? - Gedrox
显示剩余2条评论

0
从你的问题听起来,我猜这是一台开发机器。如果是这样的话,只需重新启动 Web 服务器以终止 PHP 脚本。如果您正在使用 Apache,则应该像这样:
sudo apache2ctl restart

仍然 - 如何检测客户端已离开页面? - Gedrox
正如所述,这仅适用于开发环境 - 您永远不会想在实时服务器上执行该命令。 - Bryan Agee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接