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