PHP基础 mysqli的事务处理

   1: <?php
   2: //                PHP 的mysqli的事务处理
   3: //========================================================
   4: //执行多条sql语句,如果都成功则提交事务,如果一个执行失败则回滚事务
   5: //把多条sql语句的执行看成一个sql语句,要么都成功,要么都失败
   6: //例:银行转账
   7: //mysql4.0以上版本都启用了事务
   8: //但目前只有InnoDB和BDB两种表类型支持事务,
   9: //在命令行中:默认创建的表类型为MyISAM表类型,是不支持事务的
  10: //在命令行中建表时添加 type=InnoDB ,默认自动提交事务autocommit,不能回滚
  11: //手动提交:
  12: //1.关闭自动提交 set autocommit=0;
  13: //2.开启事务 start transaction (mysqli中不需要开启,自动开启)
  14: //3.$mysqli->query($sql); 执行sql
  15: //4.判断执行是否成功
  16: //5.如果都成功,则提交事务commit(),否则回滚事务 rollback()
  17:  
  18: //创建连接对象
  19: $mysqli = new mysqli("localhost","root","1234","BankDB");
  20:  
  21: if($error=$mysqli->connect_error){
  22:     die("连接数据库失败:".$error);
  23: }
  24:  
  25: //设置传输字符编码
  26: $mysqli->query('set names utf8');
  27: // 或者
  28: // $mysqli->set_charset("uf8");
  29:  
  30: //关闭自动提交事务
  31: $mysqli->autocommit(false);
  32:  
  33: $error=true;
  34:  
  35: $price=50;
  36:  
  37: $sql1= "update uinfo set umoney=umoney-{$price} where uname='张三';";
  38: $sql2= "update uinfo set umoney=umoney+{$price} where uname='李四';";
  39:  
  40: //执行sql语句
  41: $result1 = $mysqli->query($sql1);
  42: if(!$result1) {
  43:     $error=false;
  44:     echo "从张三转出失败!
";
  45: }
  46: else if($mysqli->affected_rows==0)
  47: {
  48:     $error=false;
  49:     echo "张三的钱没有变化!
";
  50: }
  51:  
  52: //执行sql语句
  53: $result2 = $mysqli->query($sql2);
  54: if(!$result2){
  55:     $error=false;
  56:     echo "转入李四失败
";
  57: } 
  58: else if($mysqli->affected_rows==0)
  59: {
  60:     $error=false;
  61:     echo "李四的钱没有变化!
";
  62: }
  63:  
  64: //判断执行过程是否出错,如果语句都执行成功则提交事务,否则回滚事务
  65: if ($error) {
  66:     $mysqli->commit();
  67:     echo "事务提交,转账成功!";
  68: } else {
  69:     $mysqli->rollback();
  70:     echo "事务回滚,转账失败!";
  71: }
  72:  
  73: //打开自动提交事务
  74: $mysqli->autocommit(true);
  75:  
  76: $mysqli->close();
  77: ?>
原文地址:https://www.cnblogs.com/lt-style/p/3511525.html