本文實例講述了php+Mysqli利用事務處理轉賬問題的方法。分享給大家供大家參考
?php header( Content-type:text/html; charset=utf-8 $mysqli = new mysqli( localhost , root , 064319 , php $mysqli- set_charset( utf8 if($mysqli- connect_errno) { die( 數據庫連接失敗 .$mysqli- connect_error); $mysqli- autocommit(false); //自動提交模式設為false $flag = true; //事務是否成功執行的標志 $query = update account set balance=balance-1000 where id=3 $result = $mysqli- query($query); $affected_count = $mysqli- affected_rows; if(!result || $affected_count == 0) { //失敗 $flag = false; $query = update account set balance=balance+1000 where id=2 $result = $mysqli- query($query); $affected_count = $mysqli- affected_rows; if(!$result || $affected_count == 0) { $flag = false; if($flag) { $mysqli- commit(); echo 轉賬成功 } else { $mysqli- rollback(); echo 轉賬失敗 $mysqli- autocommit(true); //重新設置事務為自動提交 $mysqli- close(); ?
代碼二:
?php try{ $pdo=new PDO( mysql:host=localhost;dbname=psp , root , $pdo- exec( set names utf8 $pdo- setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//設置異常處理模式 $pdo- setAttribute(PDO::ATTR_AUTOCOMMIT,0);//關閉自動提交 }catch(PDOException $e){ echo 數據庫連接失敗 exit; try{ $age=10; $pdo- beginTransaction();//開始事務 $affected_rows1=$pdo- exec( update kfry set k_age=k_age+{$age} where k_name= user1 $affected_rows2=$pdo- exec( update kfry set k_age=k_age-{$age} where k_name= user2 //隨意更改使之執行成功或失敗 /* if($affected_rows1 $affected_rows2) $pdo- commit(); echo 操作成功 }else{ $pdo- rollback(); } */ if(!$affected_rows1) throw new PDOException( 加入錯誤 if(!$affected_rows2) throw new PDOException( 減少錯誤 echo 操作成功 $pdo- commit();//如果執行到此處前面兩個更新sql語句執行成功,整個事務執行成功 }catch(PDOException $e){ echo 操作失?。?.$e- getMessage(); $pdo- rollback();//執行事務中的語句出了問題,整個事務全部撤銷 $pdo- setAttribute(PDO::ATTR_AUTOCOMMIT,1); //測試是否成功 echo /n操作結果為:/n $sql= select * from kfry $result=$pdo- query($sql); foreach($result as $v) echo $v[ k_name ]. .$v[ k_age ]. /n ?
總結:以上就是本篇文的全部內容,希望能對大家的學習有所幫助。
相關推薦:
PHP中static關鍵字的定義、遲綁定以及與self關鍵字的區別
php大規模數據提交的方法
php針對文件夾操作的方法
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答