php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬實(shí)例

字號(hào):


    這篇文章主要介紹了php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬,實(shí)例分析了事物控制的原理與事物回滾的使用技巧,需要的朋友可以參考
    本文實(shí)例講述了php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬的方法。分享給大家供大家參考。具體分析如下:
    事務(wù)控制,也就是說(shuō)所有的語(yǔ)句執(zhí)行成功后,才會(huì)提交。否則,如果前面有語(yǔ)句執(zhí)行成功,而后面沒(méi)有執(zhí)行成功,則回滾到執(zhí)行之前的狀態(tài)。通過(guò)銀行轉(zhuǎn)賬的案例來(lái)說(shuō)明這個(gè)應(yīng)用。一個(gè)賬號(hào)轉(zhuǎn)了錢出去,另一個(gè)賬號(hào)必須有錢轉(zhuǎn)入,這樣才算成功。
    代碼如下:
    <?php
    //1、創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
    $mysqli = new MySQLi("localhost","root","123456","liuyan");
    if($mysqli->connect_error){
    die($mysqli->connect_error);
    }
    $mysqli->query("set names 'GBK'");
    $mysqli->autocommit(false);
    //首先設(shè)置autocommit為false,也就是不自動(dòng)提交
    $sql1 = "update account set balance=balance-2 where id=1;";
    $sql2 = "update account set balance=balance+2 where id=2;";
    $res1 =$mysqli->query($sql1) or die($mysqli->error);
    $res2 =$mysqli->query($sql2) or die($mysqli->error);
    if(!$res1 || !$res2){
    echo "轉(zhuǎn)賬失敗";
    $mysqli->rollback();//如果有一條不成功,則回滾
    }else{
    $mysqli->commit();//兩條語(yǔ)句都執(zhí)行成功,則提交
    echo "轉(zhuǎn)賬成功";
    }
    ?>
    希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。