1

私は何人かの友人と請求システムを作っています、それはこのように機能します:顧客は電話をかけます。顧客は電話を切ります。通話料金が計算されます。通話料金は、お客様のクレジットから引き下げられます。

次のようにすることにしました。$balance= $ balance-$ callpriceを実行した後、ユーザーの残高を取得して変数$ balanceに格納し、最後にデータベースを更新します。

問題は、顧客が同時に電話をかけることができ、2つの電話が同時に終了し、他のスクリプトが新しい残高を更新する前に一方がデータベースの値を取得した場合、一方の呼び出しが失われることです。 。私はphpを使用しています。

どうすればいいですか?

ありがとう、そして申し訳ありませんが、私は英語が苦手です...

4

1 に答える 1

1

問題は、2つのSQLステートメントを使用してユーザーの残高を更新しようとしているように見えることです。1つSELECTはユーザーの残高に、もう1つUPDATEはPHPを使用して残高を差し引いた後のユーザーの残高に更新します。

すべてを1つの操作で実行し、競合状態の可能性を排除できます。

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