我希望这段代码一天只查询一次,这意味着在它发生后代码将被隐藏或禁用,这可能吗?谢谢:)
$time = date("G");
if($time >= 12 && (isset($_SESSION['UserName']))){
mysql_query("Update users set diamonds = diamonds+1 where username = 'NaiTreNo'");
}
最佳答案
当然,cronjob 是一个开始,但即使是 cronjobs 也可能会失败,或者您可能有多个机器用于同一个数据库。
用 last_daily_diamond datetime
列扩展表格,您在用户获得钻石时设置该列,因此:
update users set diamonds=diamonds+1, last_daily_diamond = now()
where username='flaschenpost' and last_daily_diamond < now() - interval 24 hour
;
如果您指的是日历日而不是 24 小时制,那么不要使用 datetime
,而要为 last_daily_diamond 使用 date
列。
update users set diamonds=diamonds+1, last_daily_diamond = curdate()
where username='flaschenpost' and last_daily_diamond <
curdate();
如果用户在 10 天后过来并且应该得到 10 颗钻石(这个决定取决于您的客户/老板/您自己!),它会得到
update users set diamonds=diamonds+1, last_daily_diamond = last_daily_diamond + interval 1 day
where username='flaschenpost' and last_daily_diamond <
curdate();
(如果查询本身发送的频率足够高)
或者更复杂一点(还没有测试)
update users set diamonds=diamonds+
(@given := round((unix_timestamp(curdate()) - unix_timestamp(last_daily_diamond))/(24*60*60))),
last_daily_diamond = curdate() + interval @given days
where username='flaschenpost' and last_daily_diamond <
curdate();
如果你不能扩展用户表,你也可以为此创建一个额外的表并加入用户表。
关于php - 试图让 php 查询每天只发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616036/