【问题标题】:Jquery's Ajax and killing SQL process on PHPJquery 的 Ajax 和 PHP 上的杀 SQL 进程
【发布时间】:2014-06-27 10:28:49
【问题描述】:

所以我有一个脚本,它使用“INSERT QUERY”逐行将 .CSV 文件导入数据库。

我希望用户能够随时停止此脚本。

这是我的 AJAX 调用:

postselect = $.post('addcsvtodatabase.php');

  1. 第一次尝试

这是我停止脚本的初始处理程序:

$('#input').click(function(){
  postselect.abort();
})

我注意到 abort() 方法确实停止了脚本,但数据仍在插入数据库中

  1. 第二次尝试

从在初始 AJAX 调用 (addcsvtodatabase.php) 上运行的 .php 脚本中,我保存 SQL 查询的进程 ID,如下所示:

    $idconnexion = $connexion->query('SELECT CONNCTION_ID()')->fetch(PDO::FETCH_ASSOC);
    $idconnexion = $idconnexion["CONNECTION_ID()"];
    $_SESSION['idconnexion'] = $idconnexion;

然后,我对 abortsql.php 脚本进行另一个 ajax 调用,该脚本获取进程 ID 并尝试终止它:

$requete = "KILL ".$_SESSION['idconnexion'];
$connexion->query($requete);

输入处理程序如下所示:

$('#input').click(function(){
  postselect.abort();
  $.post( "abordsql.php");
})

问题是,我注意到当我尝试中止导入时,abortsql.php 处于“加载”模式,并且仅在初始 ajax 调用完成时才会触发,因此它只会在进程结束时终止进程完了,没啥用。

我尝试在 phpmyadmin 上手动终止该进程(我从脚本和 PHPmyadmin 获得相同的进程 ID,所以那里没有问题),它可以工作,它确实停止将数据导入数据库。

如何在不等待初始 AJAX 调用结束的情况下运行 abordsql.php 脚本?

谢谢!

【问题讨论】:

    标签: php jquery mysql sql ajax


    【解决方案1】:

    $_SESSION['idconnexion'] = $idconnexion;之后,添加:

    session_write_close();
    

    会话文件已打开并锁定,因此您的中止脚本无法启动会话。

    【讨论】: