1

我正在和一些朋友制作一个计费系统,它是这样工作的:客户拨打电话。客户挂断电话。计算调用的价格。电话的价格从客户的信用中扣除。

我们决定进行以下操作:获取用户的余额并将其存储在变量 $balance 中,然后执行 $balance = $balance - $callprice,最后更新数据库。

问题是客户可以同时拨打电话,如果两个电话同时完成,其中一个在另一个脚本更新新余额之前获取数据库中的值......其中一个电话将丢失. 我正在使用 php。

知道我该怎么做吗?

谢谢,对不起,我的英语很差......

4

1 回答 1

1

问题是您似乎正在尝试使用两个 SQL 语句来更新用户的余额:一个SELECT是用户的余额,另一个UPDATE是使用 PHP 减去余额后的用户余额。

您可以在一次操作中完成所有操作并消除竞争条件的可能性:

UPDATE users
SET balance = balance - <callprice here>
WHERE user_id = <user_id here>
于 2012-07-08T20:18:38.703 回答