首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过同时打两个电话来阻止同一个用户

问如何通过同时打两个电话来阻止同一个用户
EN

Stack Overflow用户
提问于 2013-03-19 09:25:31
回答 3查看 183关注 0票数 1

我想阻止用户同时打两个电话。因为如果同时有两个调用,它会在我的应用程序中创建bug并更新错误的信息。我希望它完成用户的第一次活动,如果用户试图同时进行两个调用,则会出现一个错误。

我正在表->中记录所有的用户活动

表feed ->

代码语言:javascript
复制
......................................................
id   ! user  !  value  !  start !  finished ! timestamp
......................................................
7    !  22   !  100000 !    ok  !    ok     ! -------- 
......................................................
6    !  22   !  251632 !    ok  !    ok     ! --------
......................................................
5    !  53   !  125469 !    ok  !    ok     ! --------
......................................................
4    !  20   !  458962 !    ok  !    ok     ! --------
......................................................
3    !  19   !  124587 !    ok  !    ok     ! --------
......................................................
2    !  17   !  321457 !    ok  !    ok     ! -------- 
......................................................

我用这种方式记录数据。

  • 当用户活动启动时,更新:用户,值并启动作为ok
  • 当用户完成活动时,它会更新:将完成为ok

现在,我非常困惑如何在同一个用户的同一时间检查和停止两个请求。

我使用php和mysql。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-19 09:52:49

在数据库中,创建一个类似于"alreadyInUse“的列,在用户调用时将其标记为true,并在用户完成调用时将其标记为false。在处理其他用户时,请始终检查alreadyInUse是否为假,如果为假,则只需进一步检查。我建议您在PHP中使用线程和同步,以获得更好的结果。

票数 3
EN

Stack Overflow用户

发布于 2013-03-20 16:23:34

我第二次建议继续执行线程和同步,但不要认为您需要额外的列,因为您的start可以达到相同的目的,并且还会节省一些内存。

票数 1
EN

Stack Overflow用户

发布于 2013-03-19 10:06:11

您可以使用select进行更新锁定读取,例如:

代码语言:javascript
复制
$mysqli->autocommit(FALSE);
$result = $mysqli->query("SELECT * FROM feed WHERE id = ? FOR UPDATE")->fetch_array();

//do stuff

$mysqli->commit();

或者一个被命名的锁:

代码语言:javascript
复制
$result = $mysqli->query('SELECT GET_LOCK(?, 5) AS feedlock')->fetch_array();

if($result['feedlock'] != 1)
{
  //handle lock error or timeout
  return;
}

 //do stuff

$result = $mysqli->query('SELECT RELEASE_LOCK(?)')->fetch_array(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15495610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档