CodeIgniter - 如何在特定时间后自动删除数据库值?

时间:2014-07-29 00:58:23

标签: php mysql codeigniter

我使用CodeIgniter构建了一个小型登录和身份验证模块,允许忘记密码重置。重置发送带有URL的电子邮件,并将随机生成的值添加到数据库中的forgotten_password列,以便忘记密码的假定用户。发送的电子邮件提供了一个指向密码重置页面的链接,该页面具有随机生成的值,以便将数据库验证为段(3)。我可以在提交新密码后删除此值,但我希望在1-2小时后将其删除,因此重置用户密码将无效。我不知道怎么做?我想也许是一个cronjob,但他们提到的只是使用CLI来执行cronjobs。

我如何使用CodeIgniter执行定时任务?

1 个答案:

答案 0 :(得分:1)

使用MySQL

假设您使用MySQL数据库,有一种方法可以在短时间后删除行。您可以创建一个类型为RECURRING且没有结束日期的新MySQL数据库事件,只需输入

即可
DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1

您需要启用event_scheduler,然后添加如下代码:

CREATE EVENT test
ON SCHEDULE EVERY 10 SECOND
ON COMPLETION PRESERVE
DO
DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1

由于日期保存方法不同,比较表达式可能会有所不同。在这种情况下,字段expiryTime将在到期时保存为unix timestamp

使用CRON

SSH命令:crontab -e

添加以下行:

0,30 * * * * php /path/to/script.php

在script.php中编写代码以查看&gt; = 120分钟的行并删除它们。

使用PHP和CRON

在表格中添加date_added timestamp列。插入行时会自动设置此值。

然后编写一个执行此查询DELETE FROM [mytable] WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(date_added) > 7200的PHP脚本。安排一个cron作业每隔一分钟运行一次。

希望有所帮助