Home  >  Article  >  Backend Development  >  PHP handles transaction submission and rollback

PHP handles transaction submission and rollback

墨辰丷
墨辰丷Original
2018-06-11 14:25:082387browse

This article mainly introduces the method of PHP using transactions to handle transfer problems. It analyzes the techniques of PHP transaction submission and rollback with examples. Friends in need can refer to it.

The examples of this article describe PHP Mysqli Use transactions to handle transfer problems. Share it with everyone for your reference

<?php 
 header("Content-type:text/html; charset=utf-8"); 
  
 $mysqli = new mysqli("localhost", "root", "064319", "php"); 
 $mysqli->set_charset("utf8"); 
  
 if($mysqli->connect_errno) { 
  die(&#39;数据库连接失败&#39;.$mysqli->connect_error); 
 } 
  
 $mysqli->autocommit(false); //自动提交模式设为false 
 $flag = true; //事务是否成功执行的标志 
  
 $query = "update account set balance=balance-1000 where id=3"; 
 $result = $mysqli->query($query); 
 $affected_count = $mysqli->affected_rows; 
 if(!result || $affected_count == 0) { //失败 
  $flag = false;  
 } 
  
 $query = "update account set balance=balance+1000 where id=2"; 
 $result = $mysqli->query($query); 
 $affected_count = $mysqli->affected_rows; 
 if(!$result || $affected_count == 0) { 
  $flag = false; 
 } 
  
 if($flag) { 
  $mysqli->commit(); 
  echo &#39;转账成功&#39;; 
 } else { 
  $mysqli->rollback(); 
  echo &#39;转账失败&#39;; 
 } 
  
 $mysqli->autocommit(true); //重新设置事务为自动提交 
 $mysqli->close(); 
?>

Code 2:

<?php 
 try{ 
 $pdo=new PDO("mysql:host=localhost;dbname=psp","root",""); 
 $pdo->exec("set names utf8"); 
 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置异常处理模式 
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//关闭自动提交 
 }catch(PDOException $e){ 
 echo "数据库连接失败"; 
 exit; 
 } 
 
 try{ 
 $age=10; 
 $pdo->beginTransaction();//开始事务 
 $affected_rows1=$pdo->exec("update kfry set k_age=k_age+{$age} where k_name=&#39;user1&#39;"); 
 $affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name=&#39;user2&#39;");//随意更改使之执行成功或失败 
 /* if($affected_rows1&&$affected_rows2) 
 { 
 $pdo->commit(); 
 echo "操作成功"; 
 }else{ 
 $pdo->rollback(); 
 } */
 if(!$affected_rows1) 
 throw new PDOException("加入错误"); 
 if(!$affected_rows2) 
 throw new PDOException("减少错误"); 
 echo "操作成功"; 
 $pdo->commit();//如果执行到此处前面两个更新sql语句执行成功,整个事务执行成功 
 }catch(PDOException $e){ 
 echo "操作失败:".$e->getMessage(); 
 $pdo->rollback();//执行事务中的语句出了问题,整个事务全部撤销 
 } 
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); 
 //测试是否成功 
 echo "\n操作结果为:\n"; 
 $sql="select * from kfry"; 
 $result=$pdo->query($sql); 
 foreach($result as $v) 
 { 
 echo $v[&#39;k_name&#39;]." ".$v[&#39;k_age&#39;]."\n"; 
 } 
?>

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

The definition of the static keyword in PHP, late binding and the difference from the self keyword

php large-scale data submission method

php method for folder operation

The above is the detailed content of PHP handles transaction submission and rollback. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn