试图让php查询在一天中发生一次

时间:2015-09-16 18:28:06

标签: php mysql sql

我希望这个代码每天只进行一次查询意味着它发生后代码将被隐藏或禁用一些如何,这可能吗?谢谢:))

$time = date("G");
if($time >= 12 && (isset($_SESSION['UserName']))){
    mysql_query("Update users set diamonds = diamonds+1 where username = 'NaiTreNo'");
}

2 个答案:

答案 0 :(得分:0)

正确的方法是在linux中使用cron作业并每天在那里执行一次PHP脚本。

但如果你真的想把它保存在你的PHP代码中,你可以每天选择一次,并制作一个if语句来检查时间

答案 1 :(得分:0)

当然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,而是使用date列for last_daily_diamond。

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();

如果您无法扩展users表,您还可以为此创建一个额外的表并加入users表。