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 "从张三转出失败!\n";
45: }
46: else if($mysqli->affected_rows==0)
47: {
48: $error=false;
49: echo "张三的钱没有变化!\n";
50: }
51:
52: //执行sql语句
53: $result2 = $mysqli->query($sql2);
54: if(!$result2){
55: $error=false;
56: echo "转入李四失败\n";
57: }
58: else if($mysqli->affected_rows==0)
59: {
60: $error=false;
61: echo "李四的钱没有变化!\n";
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