gpt4 book ai didi

javascript - 中断 PHP 脚本从 Javascript/AJAX 执行大型 mysqli 查询

转载 作者:行者123 更新时间:2023-11-29 10:37:22 26 4
gpt4 key购买 nike

我对 MySQL 数据库有一个非常大的查询,需要大约 20 秒(从数百万行收集数据)。该查询通过 AJAX 调用运行,然后等待收集数据的 php 脚本的响应。

JS 查询:

$.ajax({
url: "../largeQuery.php",
type: "POST",
success: function (data) {
alert(data);
}
});

largeQuery.php:

$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); //these are set elsewhere
$largeQuery = 'I am some super long query';
$response = $mysqli->query($largeQuery);
print_r($response);

但是,如果用户更改了页面内容并且不再需要 $response 数据,则下一页将被锁定,因为 MySQL 仍在获取 $largeQuery > 并且在完成 $largeQuery 之前无法处理另一个查询。

我知道我可以从$thread_id = $mysqli->thread_id获取线程ID,然后通过$mysqli->kill($thread_id)杀死它 code>,但是如何让 JS 对当前运行的 PHP 代码发出更新?

最佳答案

MySQL 不会阻止您的 PHP。问题出在 session 上。在查询过程中,PHP会等待查询,而session会等待PHP完成,在此期间session将被锁定,PHP不会接受新的请求,直到查询完成,然后php执行完成。

您可以在运行查询之前关闭 session ,但必须确保之后不要从 session 中读取/写入(或者您可以在查询后重新打开它)。

但在这种情况下,您可能会面临查询速度慢的查询淹没 SQL 的风险,甚至会进一步减慢速度。尝试优化它。

有一篇关于这个案例的小文章:http://konrness.com/php5/how-to-prevent-blocking-php-requests/

关于javascript - 中断 PHP 脚本从 Javascript/AJAX 执行大型 mysqli 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46183582/

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