php - 如何防止php中的两个单独的ajax调用修改同一个数据库

标签 php javascript ajax database multithreading

我有一个 javascript 客户端,它有时会在几毫秒内向 (php) 服务器发送两个 ajax 请求。 (这是我无法从客户端控制的 javascript 错误,我只能控制服务器端)。

第一个请求检查凭证是否已经存在于数据库中(给定几个参数..即客户ID等)..如果凭证已经存在,它只是重新使用凭证并更新值,如果它不会,它会从头开始创建一个新的。

问题是在它完成检查凭证是否存在之前..第二个请求进入并检查凭证是否也存在..此时第一个请求还没有创建凭证..

长话短说..我们最终得到了 2 个重复的凭证..(并且数据库不限制凭证名称是唯一的。我也无法控制数据库)..

那么如何防止第二个 ajax 请求在第一个请求完成之前执行任何操作?

请记住,这两个请求是两个不同的线程。因此,如果我创建任何 $isVoucherCreationInProgress 变量,它将毫无用处,因为第二次调用将完全忽略它。

想法?

最佳答案

如果 2 个 ajax 请求来自同一个客户端,则在服务器端创建一个类似锁的系统,因此如果有人检查了凭证是否存在,则设置一个 session 变量,直到它完成它必须做的事情。因此,当第二行出现时,它首先检查 session ,如果(其他人正在使用凭证)稍后通过消息检查完成它,所以在客户端,当它带有被拒绝的消息时,您可以简单地用 1 发送它第二次延迟,以确保没有人在“工作”。

希望这对您有所帮助。

或者您可以看到这个问题以便在 php 中创建互斥体:PHP mutual exclusion (mutex)

关于php - 如何防止php中的两个单独的ajax调用修改同一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877930/

相关文章:

javascript - 如何将 php 添加到 javascript 谷歌标签

单元格等于字符串时的PHPExcel条件格式

javascript - 一个 mouseleave 事件将 $(this) 记录为元素;另一个将其记录为委托(delegate)对象

javascript - Select2 4.0 - 按键不触发选择

javascript - 在 Ajax 调用期间获取 header 值

jquery - 部分发布回更新面板后样式中断。我怎样才能解决这个问题?

javascript - Jquery $.get() 和 $.ajax() 没有得到相同的结果

php - 我的 MYSQL 数据库使用哪种搜索方法

php - 定制产品销售闪光徽章

javascript - 如何使用 jQuery 定义函数参数