php - 阻止 2 个相同的查询几乎同时执行?

标签 php mysql ajax

我开发了一个基于 AJAX 的游戏,其中有一个错误(非常遥远,但在数量上它至少每小时发生一次)由于某种原因两个请求几乎同时发送到处理页面(最后一个我跟踪,请求相差 .0001 毫秒)。在执行查询之前有一个检查以确保它不会被执行两次,但是由于差异很小,所以在执行下一个查询之前检查还没有完成。我很困惑,我该如何避免这种情况,因为它会在游戏中造成严重的问题。

更清楚一点,查询在游戏中开始新一轮,所以当它执行两次时,它同时开始 2 轮,这打破了游戏,所以我需要能够停止脚本如果上一轮未结束,则执行,即使上一轮在 .0001 毫秒前开始。

最佳答案

诀窍是使用原子更新语句来做一些对两个线程都不能成功的事情。它们不能都成功,因此您可以简单地执行如下查询:

UPDATE gameinfo SET round=round+1 WHERE round=1234

其中 1234 是正在进行的当前回合。然后检查受影响的行数。如果线程影响零行,则它失败了并且其他人事先已经完成了。我假设当自动提交打开时,上面的内容将在它自己的事务中执行。

关于php - 阻止 2 个相同的查询几乎同时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2440247/

相关文章:

jquery - 如何克服从 Angular 2 到 Node/express 的 CORS?

javascript - 获取 div 内表格中单元格的 ID(JS 和 HTML)

php - mySQL 对同一查询进行双重过滤

php - 当 MySQL 数据库发生变化时,如何使我的网页上的元素自动更新?

php - 从具有 "AUTO_INCREMENT"的字段中获取未使用的 id - mysql

mysql - 选择MySQL中的所有记录,除非记录存在于另一个表中

MVC 中启用 AJAX WCF 服务?

javascript - 在 HTML 表单中实现下拉选项菜单的正确方法是什么?

php - 使用 PHP 将数据插入数据库

php - 使用php和mysql计算时间戳