<?php
$over_time=time()+3600;
$nowtime=time();
$query=$db->query("select down_time from members where uid='1'");
$down_time=$query->fect_assoc(); if($down_time['down_time']<$nowtime){
$db->query("update members set down_time=$over_time where uid='1'");
die('你成功得奖励!');
}else{
$latime=$down_time['down_time']-$nowtime;
die("你已经领过奖励了,请等$latime分钟后再试!");
}?>
这个判断有个问题,就是点得快一点后呢,可能就会给他两次以上的奖励。。主要看他的网络有多卡,我最多看到有给
8次奖励。有什么办法可以解决这个问题呢?
解决方案 »
- php怎么传递二维数组做函数参数呢?
- 求一本PHP入门书籍
- php操作大文本文件怎么搞。急
- Apache设置基于端口的虚拟主机的问题
- 100分求助高手一个高难度的实现php获得系统内存使用率方法,顶者同样给分,不够再开帖
- 为什么我关闭了浏览器,但是SESSION仍然不会清空?(没有设置SESSION的过期时间)
- Editplus快捷操作集锦——心血来潮,欢迎大家添加,介绍自己经验
- 小女子有一PHP图片处理的问题!急着处理能~[在线等呢]对了立刻有分
- SyGate 的配置问题
- php mysqli_query()没有返回值
- setcookie 失败呀.怎么办啊.
- 为什么这段代码导出EXCEL有错?
所以当几个select 后,他还没有update完。。所以才造就了这个结果?那用锁的话,如果我并发比较高,对性能比影响比较大。有没有好的办法?我一直认为SQL语句是按照顺序执行的郁闷了。。
还有一种是写PHP逻辑,在MENCACHED等内存缓存中增加一个标志,必须等你执行完后才能执行下次操作。
还有一种是在前端JS判断,也是增加一个标记,就是全局变量记录上次点击该按钮时间,和本次时间比较,小于你要求的时间就不提交到后端。
update members set down_time=$over_time where uid='1'
and down_time<date_sub(now(),interval 1 hour )
这样重复的提交就不会发生实际的数据更改