我最近在
PHP上做了一些Web开发工作,这使我一直在学习语言.到目前为止,我不需要使用它来与数据库进行交互,但我知道它提供了许多方便的功能.
虽然我知道基本的sql并且已经在数据库中处理数据的基本操作,但我不明白基于PHP / Javascript / sql建立网站的Web开发人员如何能够管理同时修改相同数据的用户.
例如,假设您有一个二十一点网站,用户在注册时将用户划分为两个团队中的一个.每当用户赢得游戏时,他们的部分奖金将被添加到该团队的运行总计中.
... $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.但是,我不确定这些中的哪一个,如果有的话,在实践中使用.
如果您的真实世界问题比这个简单的示例更大,您应该将事务与锁定表结合使用,以确保用户不会相互覆盖.