我最近一直在做一些PHP的web开发工作,这让我开始学习这门语言。到目前为止,我还不需要使用它来与数据库交互,但我知道它提供了许多方便的函数来这样做。
虽然我知道基本的SQL,并使用过数据库中数据的基本操作,但我不明白基于PHP/Javascript/SQL的网站开发人员如何能够管理同时修改相同数据的用户。
例如,假设你有一个21点的网站,当用户注册时,它将用户分为两个团队之一。每次用户赢得一场比赛,他们的赢利的一部分将被添加到该团队的运行总数中。
因此,假设执行此操作的函数的伪代码如下所示:
...
$total = mysql_query("SELECT score FROM team1");
$total = $total + $mytotal;
mysql_query("UPDATE team1 SET score='".$total."'");
...如果两个玩家同时玩游戏,他们很可能会在另一个玩家有机会递增和更新表之前调用SELECT,因此其中一个用户的更改将立即被覆盖。
我的问题是,如何避免这种情况?这是在代码级别使用PHP完成的吗,或者您正在使用的数据库提供的功能是否有助于防止这种情况发生?
我做了一些研究,似乎PHP确实提供了一个semaphore机制,我也注意到mysql提供了一个LOCK table feature。但是,我不确定这两种方法中的哪一种在实践中使用。
发布于 2009-11-11 11:45:08
将逻辑放在数据库中,这些语义基本上已经为您解决了。
update teams
set score = score + 1
where team_id = 1。。或者其他比分和队号。
https://stackoverflow.com/questions/1712860
复制相似问题