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