1. 程式人生 > >MySQLi面向對象實踐---事務處理

MySQLi面向對象實踐---事務處理

操作 begin cep fin 代碼 code except 處理 ini

在看這篇博客的時候,如果你有什麽疑惑嗎,可以參照一下這兩篇博客

MySQLi面向過程實踐---事務處理http://www.cnblogs.com/-beyond/p/7577232.html

PDO實現事務處理http://www.cnblogs.com/-beyond/p/7551177.html

MySQLi面向對象的事務處理涉及以下三個函數

public bool mysqli::begin_transaction ([ int $flags [, string $name ]] )
bool mysqli::commit ( void )
bool mysqli::rollback ( void )

示例代碼如下:

最重要的莫過於關閉自動提交

 1 <?php 
 2     $db=new mysqli("localhost","root","root","test");
 3 
 4     $db->begin_transaction();
 5     $db->autocommit(FALSE);//重要
 6     try{
 7         $sql_1="delete from aaa where uid = 2;";
 8         $db->query($sql_1);
 9         if($db->affected_rows<=0){
10 throw new Exception("failed to delete data one\n"); 11 //如果操作一失敗,則拋出異常,不會繼續執行下個操作 12 } 13 14 $sql_2="delete from aaa where uid = 999"; 15 $db->query($sql_2); 16 if($db->affected_rows<=0){ 17 throw new Exception("failed to delete data two\n");
18 //如果操作2失敗,則拋出異常 19 } 20 21 if(!$db->commit()){ 22 throw new Exception("failed to commit\n"); 23 //如果提交操作出錯,則拋出異常 24 } 25 echo "success to delete two data\n"; 26 } catch (Exception $e){ 27 $db->rollback(); 28 echo $e->getMessage(); 29 echo "haven‘t finish all works\n"; 30 } 31 32 $db->close(); 33 ?>

MySQLi面向對象實踐---事務處理