php 事務簡單實現

2021-09-11 02:37:39 字數 2257 閱讀 4375

<?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 使用事務簡單實現

db new mysqli localhost root test 連線資料庫 db autocommit false 設定為非自動提交 事務處理 sql1 insert into test test1 name values 1 result1 db query sql1 sql2 insert ...

php事務回滾簡單實現方法示例

本文例項講述了php事務回滾簡單實現方法。分享給大家供大家參考,具體如下 servername程式設計客棧 localhost username root password admin dbname test trycatch pdoexception e conn null 更多關於php相關內容...

php增加事務 php 事務

標籤 dbhost localhost 3306 mysql伺服器主機位址 dbname test dbuser root mysql使用者名稱 dbpass root mysql使用者名稱密碼 conn mysqli connect dbhost,dbuser,dbpass,dbname if c...