0

我正在制作我的恢复密码系统,我需要 PHP 等待 2 小时,然后更新数据库表中的特定行,我该怎么做?

4

4 回答 4

4

将开始时间存储在用户的行上,然后有一个每 5 分钟左右运行一次的 cron 作业并查询需要更新的作业。

或者 - 当您需要访问应该在 2 小时后更新的数据时,检查该时间并查看是否超过 2 小时,进行更新,然后获取数据。

于 2013-06-19T14:10:17.773 回答
0

如果您在专用服务器上,则可以每 10 分钟午餐一次 CRON,这会删除超过 2 小时的表条目。 维基百科上的 Cronjobs 文档

如果你不在专用服务器上,我想你的服务商可以给你一个好办法。

于 2013-06-19T14:11:56.950 回答
0

你不会让 PHP 等待。您将过期时间戳添加到数据库中的恢复信息中,然后在(如果?)用户实际通过恢复系统时检查该时间戳,例如

SELECT ...
WHERE (expirytimestamp >= NOW() - INTERVAL 2 HOUR)

如果用户在 2 小时限制内到达,此查询将返回相关记录,他们可以继续。如果他们超过了 2 小时的限制,恢复选项将过期,您将他们转移到“获取另一封重置电子邮件”路径。

如果您不希望您的数据库中到处都是废弃的恢复尝试,那么您可以有一个标准的 CRON 作业进入并删除过期的记录。

于 2013-06-19T14:21:51.453 回答
0

编程是简单意味着效率的事情之一。通过尝试找到定时删除行的方法,您正在添加另一个需要编码的作业,以及另一个故障点。

实现两小时重置限制的最佳方法是向表中添加时间戳行(time()在 PHP 中)。然后,当您从恢复脚本中的表中读取行时,

if ($time < time() - 2 * 60 * 60) {
    // Delete row
} else {
    // Perform recovery

这假设$time是存储的时间戳,并且您具有删除和恢复的功能。顺便说一句,时间戳以秒为单位,因此$time < time() - 2 * 60 * 60检查存储的时间戳是否比当前时间戳小两小时(以秒为单位)。

于 2013-06-19T15:03:56.433 回答