2012-07-08 45 views
1

我正在与一些朋友制作帐单系统,它的工作方式如下: 客户拨打电话。 客户挂断电话。 计算通话的价格。 通话的价格从客户的信用中减少。对数据库中的同一行进行多次更新

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

问题是客户可以同时进行呼叫,并且如果两个呼叫同时完成,并且其中一个呼叫在其他脚本更新新的余额之前获取数据库上的值...其中一个电话将会丢失。我使用的是PHP。

任何想法我该怎么做?

谢谢,对不起,我有一个糟糕的英语...

回答

1

问题是,它看起来像你试图用两个SQL语句来更新用户的平衡:一个SELECT用户的平衡,那么另一个到UPDATE用户的余额在用PHP减去余额后。

你可以做到这一切在一个操作中,消除种族条件的可能性:

UPDATE users 
SET balance = balance - <callprice here> 
WHERE user_id = <user_id here> 
+0

谢谢,它帮助了很多,解决我的问题。 – 2012-07-08 20:29:10