トランザクション処理の出金処理で残高テーブルの値がマイナスになったら、どのように対処すべきでしょうか?
プログラム側でcommit後、残高の値を取得してマイナスだったら、ロールバックするようにするようにしたいのですが、updateしてマイナスになったらロールバックするようにするにはどのようなコードを書くべきでしょうか?トリガーなどでうまいやり方があればそれでも構いません。
下記既存コードになります。
php
1public function updateAccountMoney($id,$output){ 2 3 if(isset($id) && $id !=''){ 4 5 try{ 6 $this->db->beginTransaction(); 7 $sql3 = "SELECT * FROM AccountMoney WHERE SID=:sid FOR UPDATE"; 8 $sql = $this->db->prepare("UPDATE AccountMoney SET account_balance = account_balance -:output WHERE SID=:sid"); 9 $sql2 = "SELECT account_balance FROM AccountMoney WHERE SID=:sid"; 10 $stmt2 = $this->db->prepare($sql3); 11 $stmt3 = $this->db->prepare($sql2); 12 $sql->bindParam(':sid',$id); 13 $stmt2->bindParam(':sid',$id); 14 $stmt3->bindParam(':sid',$id); 15 $sql->bindParam(':output',$output); 16 $stmt2->execute(); 17 $stmt3->execute(); 18 $sql->execute(); 19 $stmt2->closeCursor(); 20 $stmt3->closeCursor(); 21 $sql->closeCursor(); 22 $this->db->commit(); 23 24 }catch(PDOException $e){ 25 $this->db->rollback(); 26 } 27 28 } 29}
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2015/12/03 12:19