【问题标题】:How can I stop sql query execution in php?如何在 php 中停止执行 sql 查询?
【发布时间】:2011-07-05 19:41:27
【问题描述】:

我有一个很长的 SQL 查询执行。当我关闭浏览器页面时,sql 查询(postgresql)继续执行。如何在页面关闭时阻止它执行?

【问题讨论】:

    标签: php sql postgresql


    【解决方案1】:

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

    据我所知,如果不以管理员身份登录并实际强制关闭威胁,就不可能告诉 PostgreSQL 连接。该方法称为pg_cancel_backend。我不会使用命令行 kill 强行终止进程。这可能会产生影响,但可以通过使用内置工具来避免。

    【讨论】:

    • 后台跟踪是一个有趣的想法,但是后台php进程如何知道其他php进程与浏览器断开连接?
    【解决方案2】:

    您必须有一些 javascript 会在页面关闭时获取,并执行回发到服务器,该服务器将连接到正在执行的进程并停止它。

    【讨论】:

    • 这只有在浏览器仍在运行时才有效——你必须捕捉到有人完全关闭浏览器,并考虑浏览器崩溃(javascript 不会这样做)
    【解决方案3】:

    你可以杀死服务器上的进程。

    【讨论】:

    • 我想删除这个答案,因为它太硬核并且不回答问题,但有人投票支持它。为什么? :)
    • 因为这是在 SQL 数据库中停止进程的唯一方法。应用程序只发送请求——暂停/等之间没有交互连接。
    • @Gedrox 我帮你搞定了。加油!
    • @OMG Ponies 但就像 Gedrox 所说,它没有回答问题。它不会将问题中的事件(关闭浏览器页面)连接到所需的行为。
    • @user151841:请参阅我对 Paul 的评论,内容涉及的内容很少
    【解决方案4】:

    从你的问题的声音来看,我猜这是一台开发机器。如果是这种情况,只需重新启动 Web 服务器即可终止 php 脚本。如果您使用的是 apache,则如下所示:

    sudo apache2ctl restart
    

    【讨论】:

    • 仍然——如何检测客户离开页面?
    • 如前所述,这仅适用于开发环境——您永远不会希望在实时服务器上发出该命令。
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 2020-02-21
    • 2011-06-14
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多