原生php 配合异常 处理事务

来源:互联网 发布:二维数组定义 编辑:程序博客网 时间:2024/06/04 20:08
    mysql_connect('localhost','root','pwd');
    mysql_select_db('cms');


    mysql_query('start transaction');
    mysql_query('SET autocommit=0');


    try{


        mysql_query('update cms_users set user_money = user_money - 10 where user_id = 43');
        if(mysql_affected_rows()){
            echo '转出成功'.'<br>';
        }else{
            throw new UpdateException('转出失败<br>');
        }


        mysql_query('update cms_users set user_money = user_money + 10 where user_id = 6');
        if(mysql_affected_rows()){
            echo '转入成功'.'<br>';
        }else{
            throw new UpdateException('转入失败<br>');
        }


        echo '交易成功';


    }catch(UpdateException $e){


        try{
            echo $e->getMessage();
            $e->ReExcute();
            echo '交易成功';
        }catch(UpdateException $e){
            echo $e->getMessage();
            mysql_query('rollback');
        }
    }catch(Exception $e){


        echo $e->getMessage().'交易失败';
        mysql_query('rollback');
    }


    mysql_query('commit');


    mysql_query('SET autocommit=1');






    /**
    * 数据库更新异常类
    */
    class UpdateException extends Exception
    {


        function __construct($message)
        {
            parent::__construct($message);
        }


        public function ReExcute(){
            mysql_query('update cms_users set user_money = user_money + 10 where user_id = 44');


            echo '重新执行一次转入<br>';


            if(mysql_affected_rows()){
                echo '转入成功'.'<br>';
            }else{
                throw new UpdateException('再次转入失败,请确认账户是否正确<br>交易失败!');
            }
        }
    }