如何使用PHP / JavaScript从客户端停止SQL查询执行?

时间:2015-08-24 07:18:53

标签: javascript php sql ajax request

我发现this answer但它已经很老了,我不确定反复ping客户端是最好的方法。

我有一个带有按钮START的HTML页面,它对另一个PHP脚本执行AJAX调用,该脚本本身执行繁重的SQL查询。完成此操作后,结果将以JSON格式返回,Javascript将显示该结果。

我需要用户能够停止此请求,因此我添加了STOP按钮。如何使这个按钮在点击时停止SQL查询(或者更常见的是任何正在运行的PHP脚本)?

到目前为止我的想法:

  • 创建按钮时创建唯一的id
  • 在提出id请求
  • 时,将此START添加到参数中
  • 创建一个PHP页面abort_request.php并使STOP按钮使用唯一的id
  • 调用它
  • abort_request.php将唯一的id存储到aborted
  • $_SESSION数组中
  • 定期检查PHP / SQL脚本中是否包含id数组

这是一个解决这个问题的好方法,还是有一些我没想到的缺点?

1 个答案:

答案 0 :(得分:0)

我不知道并且从未体验过heavy SQL query,但根据我的经验和我的研究,您可以通过abort(); xmlhttpajax来恢复执行执行sql的php文件。

我的测试:

的index.php

var xmlhttp;
function loadXMLDoc(){
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "mysql.php", true);
xmlhttp.send();
}
function stopLoad() {
xmlhttp.abort();
}

mysql.php

mysql_connect("localhost", "root", "");
mysql_select_db("test");
for ($i = 0; $i < 9999; $i ++) {
INSERT INTO `test`.`big-data` (`id`, `a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`, `u`, `v`, `w`, `x`, `y`, `z`) VALUES ('', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test');
}

插入数据需要9.402秒。 如果我在3秒左右停止它将停止执行,但仍然保留在我停止之前插入的数百个数据。