如何在用户中止时停止MySQL查询?

时间:2015-01-30 10:15:53

标签: php mysql

问题

我有一个大型查询,我想在用户中止后立即终止。我搜索过并发现了以下问题:

从这些问题中我减去了导致下面代码的有用部分。

代码

// Connection to query on
$query_con = mysqli_connect($host, $user, $password, $name);

// Connection to kill on
$kill_con = mysqli_connect($host, $user, $password, $name);

$slow_query = "...";

// 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()) {
        $articles[] = $row;
    }
}

echo count($articles);

错误

上面的代码引发了以下错误:

  • 注意:使用未定义的常量MYSQLI_ASYNC - 假设为'MYSQLI_ASYNC'
  • 警告:mysqli :: query()期望参数2为long,字符串为
  • 注意:未定义的变量:mysqli
  • 注意:尝试获取非对象的属性
  • 致命错误:调用未定义的函数mysqli_poll()

问题

我真的被困在这里,不知道如何从这一点开始。

0 个答案:

没有答案