我正在制作恢复密码系统,我需要PHP等待2个小时然后更新数据库表中的特定行,我该怎么做?
答案 0 :(得分:4)
将开始时间存储在用户的行上,然后有一个每5分钟左右运行一次的cron作业,并查询需要更新的作业。
或者 - 当您需要访问应该在2小时后更新的数据时,检查该时间并查看是否超过2小时,进行更新,然后获取数据。
答案 1 :(得分:0)
如果您在专用服务器上,则可以每隔10分钟在CRON中午餐,这会删除超过2小时的表格条目。 Documentation of Cronjobs on Wikipedia
如果您不在专用服务器上,我认为您的服务提供商可以为您提供一个好方法。
答案 2 :(得分:0)
你不要让PHP等待。您将数据库中的恢复信息添加到期时间戳,然后检查用户实际通过恢复系统的时间戳(如果?),例如
SELECT ...
WHERE (expirytimestamp >= NOW() - INTERVAL 2 HOUR)
如果用户在2小时限制内到达,此查询将返回相关记录,他们可以继续。如果他们超过2小时限制,则恢复选项已过期,您将其转移到“获取另一个重置电子邮件”路径。
如果您不希望自己的数据库充斥着废弃的恢复尝试,那么您可以使用标准的CRON作业进入并删除过期的记录。
答案 3 :(得分:0)
编程是简单意味着效率的事情之一。通过尝试找到定时删除行的方法,您将添加编码所需的另一个作业,以及另一个失败点。
实现两小时重置限制的最佳方法是向表中添加时间戳行(PHP中为time()
)。然后,当您从恢复脚本中的表中读取行时,
if ($time < time() - 2 * 60 * 60) {
// Delete row
} else {
// Perform recovery
这假设$time
是存储的时间戳,并且您具有删除和恢复功能。顺便说一下,时间戳以秒为单位,因此$time < time() - 2 * 60 * 60
检查存储的时间戳是否是小于当前时间戳的两小时的值。