X分钟后更改表,即使用户关闭窗口,这是一个好方法吗?

时间:2015-12-28 00:35:07

标签: php mysql pdo

我试图建立一个任务系统,用户可以接受或不接受任务,如果在X分钟后它没有被接受,它将被停用。这是一个很好的方法吗,它能够每天处理10K任务吗?

<?php
    $mission_id = htmlspecialchars($_POST["mission_id"]));
    $user = $_SESSION["user"];

    // Verify that user is same as mission agent

    $verify = $conn->prepare("SELECT agent FROM missions WHERE id = ? AND active = 0 ORDER BY id limit 1");
    $verify->bindParam(1, $user);
    $verify->execute();
    $verify = $verify->fetch(PDO::FETCH_ASSOC);

    if($verify["agent"] == $user)   {
        unset($verify);
        // Do time code.
        ignore_user_abort(true);
        set_time_limit(300);
        $time = 0;
        while(time < 300)   {
            sleep(15);
            time += 15;
            // check if mission was accepted

            $verify = $conn->prepare("SELECT accepted FROM missions WHERE id = ? ORDER BY id LIMIT 1");
            $verify->bindParam(1, $mission_id);
            $verify->execute();
            $verify = $verify->fetch(PDO::FETCH_ASSOC);
            if($verify["accepted"] == 0)    { // not accepted
                unset($verify);
                // Inactivate mission
                $inactivate = $conn->prepare("UPDATE missions SET active = 0 WHERE id = ?");
                $inactivate->bindParam(1, $id);
                $inactivate->execute();
                unset($inactivate);
            }
            else {
                break;
            }
        }
    }
    else    {
        header("location: logout.php");
        // Log user out
    }
?>

2 个答案:

答案 0 :(得分:1)

使用适用于这些类型情况的mysql Create Event功能。可以将它们视为计划存储过程(尽可能复杂),以非常灵活的重复方式进行激活。

此功能用于取消cron,尤其是在仅进行数据库操作时。

在我写的Answer中可以看到它的高级视图。

答案 1 :(得分:0)

我会使用过期日期时间戳并设置它 未来17分钟,当你创造任务时

如果他们不采取行动。它会自动过期 如果他们这样做..将过期记录更新为9999-12-31

不使用有效/无效。只需使用当前时间来完成所有活动任务。

没有事件需要。没有crontab。没有额外的代码