首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止双执行PHP+JS

问防止双执行PHP+JS
EN

Stack Overflow用户
提问于 2015-12-21 15:19:45
回答 1查看 81关注 0票数 0

我正在使用PHP + JS创建一个游戏。每个游戏都是人对人,所以只有两个用户。这很管用,但我很难接受“双人预订”。如下所示:

  1. User1创建游戏#10 (PHP)
  2. 游戏出现在大厅(JS)
  3. User2加入游戏#10 (PHP)
  4. User3加入游戏#10 (PHP)
  5. 游戏从大厅消失(JS)

步骤3和步骤4的间隔仅为毫秒。当用户加入游戏时,我首先检查“座位”是否被占用。如果没有,我解析所有的基本数据,等等,然后我把座位设置为已占的位置。在解析过程中,用户似乎可以加入相同的游戏。正如我前面所说,这是一个毫秒的问题。但我怎样才能阻止这一切呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-21 15:37:26

您可以使用隐式数据库记录锁,方法是执行一种测试集操作以获得空闲座位,如下所示:

代码语言:javascript
复制
UPDATE blackjack_hands
SET    user_id = :user_id
WHERE  user_id IS NULL
AND    blackjack_id = :blackjack_id
AND    creator = '0';

然后检查更新记录的数量(例如,在行中),以确定座位是否成功(这意味着它是免费的)。

这样,第二个用户就不可能进行同样成功的更新。

这将是悲观锁定的一个例子。

上面的查询假设在游戏创建期间,您将立即插入两条记录,一条用于创建者的user_id (正如您已经做的那样),另一条用于未知对手的user_id,初始化为NULL。

注意:考虑从不推荐的mysql_*函数中移开。您可以使用mysqli_*或PDO接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34398977

复制
相关文章

相似问题

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