我将用户注册日期保存在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作业。如果这是你的情况,还有其他选择。