gpt4 book ai didi

php - Jquery的Ajax和杀死PHP上的SQL进程

转载 作者:行者123 更新时间:2023-11-29 12:53:09 24 4
gpt4 key购买 nike

所以我有一个脚本,可以使用“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,因此没有问题),并且它有效,它确实停止将数据导入数据库。

如何运行 abordsql.php 脚本而不等待初始 AJAX 调用结束?

谢谢!

最佳答案

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

session_write_close();

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

关于php - Jquery的Ajax和杀死PHP上的SQL进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com