x天后删除用户账号


Delete User Account after x days

我将用户注册日期保存在mysql数据库中的signupdate列中,然后我将该日期添加2天并将其保存在expiredate列中。

我需要知道如果达到expiredate日期,我如何删除用户帐户?

我知道这可以用cron job 来完成,但是我很难理解这个概念。

这里是我如何保存过期和信号更新在mysql数据库:

$date = date ( 'Y-m-d' );
$newdate = strtotime ( '+2 days' , strtotime ( $date ) ) ;
$newdate = date ( 'Y-m-d' , $newdate );
$stmt = mysqli_prepare(
    $db_conx,
    "INSERT INTO users (expiredate, signupdate) VALUES (?, now())"
);
//after validation, of course
mysqli_stmt_bind_param($stmt, "s", $newdate);
mysqli_stmt_execute($stmt);
if (mysqli_affected_rows($db_conx))
{
    mysqli_stmt_close($stmt);
    //update was successful
    $id = mysqli_insert_id($db_conx);
}

有谁能指点我一下吗?

提前感谢。

类似于

DELETE FROM `users` WHERE `expiredate` < DATE_SUB(NOW(), INTERVAL X DAY)

但是,首先使用这个where条件执行一个select,看看它是否选择了您期望的内容。然后我建议使用active字段并禁用帐户-这样您就可以取消删除某人。

您可以这样做,其中d是no。天

DELETE FROM users WHERE DATEDIFF(expiredate,signupdate)>=d

如果您可以在数据库上创建一个事件,您可以执行以下操作:

DELIMITER ~
DROP EVENT IF EXISTS clearUsers~
CREATE EVENT clearUsers
ON SCHEDULE
    EVERY 15 MINUTE
ON COMPLETION PRESERVE
DO BEGIN
    DELETE EXPIRED USERS;COMMIT;
END~
DELIMITER ;

主体可以是一个存储过程调用,也可以只是一个查询。

http://dev.mysql.com/doc/refman/5.6/en/create-event.html

您的需求分为两部分:

  • 写一个脚本来删除已经过期的用户账号。这可以在PHP中完成,您可以从命令行测试您的脚本。

  • 定期运行此脚本。这就是您将使用cron的目的。cron服务每分钟运行一次,并读取一个名为crontab的文件。如果crontab中有与当前启动时间匹配的作业。您应该搜索"cron"以找到数百个描述crontab格式的站点,例如http://www.unixgeeks.org/security/newbie/unix/cron-1.html

您通常使用命令行运行命令crontab - e来编辑crontab。

一些便宜的主机提供商不允许您运行cron作业。如果这是你的情况,还有其他选择。