PHP 使用事務簡單實現

2021-08-21 05:41:36 字數 2265 閱讀 8094

<?php

$db = new mysqli("localhost","root","","test"); //連線資料庫

$db->autocommit(false); //設定為非自動提交——事務處理

$sql1  = "insert into `test`.`test1` (`name` )values ('1' )";

$result1 = $db->query($sql1);

$sql2  = "insert into `test`.`test2` (`a` )values ('1')";

$result2 = $db->query($sql2);

if ($result1 && $result2) else

$db->autocommit(true); //設定為非自動提交——事務處理

$db->close();

?>

mysql的事務處理主要有兩種方法。

1、用begin,rollback,commit來實現

begin 開始乙個事務

rollback 事務回滾

commit 事務確認

2、直接用set來改變mysql的自動提交模式

$conn = mysql_connect('localhost','root','root') or die ("資料連線錯誤!!!");

mysql_select_db('test',$conn);

mysql_query("set names 'gbk'"); //使用gbk中文編碼;

//開始乙個事務

mysql_query("begin"); //或者mysql_query("start transaction");

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯

$res = mysql_query($sql);

$res1 = mysql_query($sql2); 

if($res && $res1)else

mysql_query("end"); 

/**************** transaction--2 *******************/

/*方法二*/

mysql_query("set autocommit=0"); //設定mysql不自動提交,需自行用commit語句提交

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯

$res = mysql_query($sql);

$res1 = mysql_query($sql2); 

if($res && $res1)else

mysql_query("end"); //事務處理完時別忘記mysql_query("set autocommit=1");自動提交

/******************對於不支援事務的myisam引擎資料庫可以使用表鎖定的方法:********************/

//myisam & innodb 都支援,

/*lock tables可以鎖定用於當前執行緒的表。如果表被其它執行緒鎖定,則造成堵塞,直到可以獲取所有鎖定為止。

unlock tables可以釋放被當前執行緒保持的任何鎖定。當執行緒發布另乙個lock tables時,或當與伺服器的連線被關閉時,所有由當前執行緒鎖定的表被隱含地解鎖。

*/mysql_query("lock tables `user` write");//鎖住`user`表

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$res = mysql_query($sql);

if($res)else

mysql_query("unlock tables");//解除鎖定

PHP如何使用事務

有時候程式處理的時候需要兩項或者多項資料處理乙個失敗其他的都不再執行,之間的關係是一錯則全錯,全都執行成功才算成功 這裡就需要用到事務處理,錯誤回滾 廢話不多說 上 linkid mysql connect localhost root root 連線資料庫 mysql select db test...

PHP中使用事務例項

pdo和mysql的寫法不一樣,處理方式一樣 dbhost localhost 3306 mysql伺服器主機位址 dbuser root mysql使用者名稱 dbpass 123456 mysql使用者名稱密碼 conn mysqli connect dbhost,dbuser,dbpass i...

Ibatis使用事務

一 事務概念 事務是一種機制 是一種操作序列,它包含了一組資料庫操作命令,這組命令要麼全部執行,要麼全部不執行。因此事務是乙個不可分割的工作邏輯單元。在資料庫系統上執行併發操作時事務是作為最小的控制單元來使用的。這特別適用於多使用者同時操作的資料通訊系統。例如 訂票 銀行 保險公司以及 交易系統等。...