php利用交易處理轉賬問題_php執行個體

來源:互聯網
上載者:User
本文執行個體講述了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";  } ?>

以上所述就是本文的全部內容了,希望大家能夠喜歡。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.