2012-07-08 82 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