我想阻止用户同时打两个电话。因为如果同时有两个调用,它会在我的应用程序中创建bug并更新错误的信息。我希望它完成用户的第一次活动,如果用户试图同时进行两个调用,则会出现一个错误。
我正在表->中记录所有的用户活动
表feed ->
......................................................
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 ! --------
......................................................我用这种方式记录数据。
现在,我非常困惑如何在同一个用户的同一时间检查和停止两个请求。
我使用php和mysql。
谢谢
发布于 2013-03-19 09:52:49
在数据库中,创建一个类似于"alreadyInUse“的列,在用户调用时将其标记为true,并在用户完成调用时将其标记为false。在处理其他用户时,请始终检查alreadyInUse是否为假,如果为假,则只需进一步检查。我建议您在PHP中使用线程和同步,以获得更好的结果。
发布于 2013-03-20 16:23:34
我第二次建议继续执行线程和同步,但不要认为您需要额外的列,因为您的start可以达到相同的目的,并且还会节省一些内存。
发布于 2013-03-19 10:06:11
您可以使用select进行更新锁定读取,例如:
$mysqli->autocommit(FALSE);
$result = $mysqli->query("SELECT * FROM feed WHERE id = ? FOR UPDATE")->fetch_array();
//do stuff
$mysqli->commit();或者一个被命名的锁:
$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(); https://stackoverflow.com/questions/15495610
复制相似问题