从PHP运行长查询时, [如果用户在浏览器中按Stop,我如何杀死查询?
考虑到我不能调用任何其他PHP函数,因为在等待MySQL时PHP被阻止了。
另外,由于会话锁定,我无法再通过Ajax向服务器发出任何请求。
因此,一种解决方案可能是:
我不知道该怎么做的两件事是:
对于那些感兴趣的人,这是我使用的:
<?php // Connection to query on $query_con = mysqli_connect($host, $user, $password, $name, $port); // Connection to kill on $kill_con = mysqli_connect($host, $user, $password, $name, $port); // Start the query $query_con->query($slow_query, MYSQLI_ASYNC); // Get the PID $thread_id = $query_con->thread_id; // Ignore user abort so we can kill the query ignore_user_abort(true); do { // Poll MySQL $links = $errors = $reject = array($mysqli->mysqli); $poll = mysqli_poll($links, $errors, $reject, 0, 500000); // Check if the connection is aborted and the query was killed if (connection_aborted() && mysqli_kill($kill_con, $thread_id)) { die(); } } while (!$poll); // Not aborted, so do stuff with the result $result = $link->reap_async_query(); if (is_object($result)) { // Select while ($row = $result->fetch_object()) { var_dump($row); } } else { // Insert/update/delete var_dump($result); }