我正在与一些朋友制作计费系统,它的工作原理如下: 客户打电话。 客户挂断电话。 计算通话价格。 通话费用从客户的信用额中减少。
我们决定做以下事项: 获取用户的余额并将其存储在变量$ balance中,然后执行$ balance = $ balance - $ callprice,最后更新数据库。
问题是客户可以同时进行呼叫,如果两个呼叫同时完成,并且其中一个在另一个脚本更新了新余额之前获得了数据库上的值...其中一个呼叫会迷路。我正在使用php。
知道我该怎么做?
谢谢,对不起,我的英语很差......
答案 0 :(得分:1)
问题是,您似乎正在尝试使用两个SQL语句来更新用户的余额:一个用于SELECT
用户的余额,另一个用于UPDATE
用户余额余额为使用PHP减去。
你可以在一次操作中完成所有操作并消除竞争条件的可能性:
UPDATE users
SET balance = balance - <callprice here>
WHERE user_id = <user_id here>