Maison  >  Article  >  développement back-end  >  Explication détaillée du traitement des transactions PHP

Explication détaillée du traitement des transactions PHP

怪我咯
怪我咯original
2017-07-12 16:29:034572parcourir

Les transactions MySQL sont principalement utilisées pour traiter des données avec des opérations volumineuses et une grande complexité. Par exemple, dans le système de gestion du personnel, si vous supprimez une personne, vous devez supprimer non seulement les informations de base de la personne, mais également les informations liées à la personne, telles que la boîte aux lettres, les articles, etc. . De cette façon, cesOpérations de base de données constituent une transaction !

1. Présentation du traitement des transactions PHP :

Transaction : est un ensemble de plusieurs événements
Transaction traitement : La transaction ne sera exécutée que lorsque tous les événements seront exécutés avec succès ; si un événement ne peut pas être exécuté avec succès, les autres événements de la transaction ne seront pas exécutés.

Tant que votre version de MySQL prend en charge les types de tables BDB ou InnoDB, votre MySQL dispose de capacités de traitement des transactions. Parmi eux, le Type de table InnoDB est le plus utilisé Bien que des événements ultérieurs aient rendu MySQL mécontent, comme l'acquisition d'InnoDB par Oracle, de tels événements commerciaux n'ont rien à voir avec la technologie. tapez à titre d'exemple. Parlons brièvement du traitement des transactions dans MySQL.

2. Code de traitement des transactions PHP :

<?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";
 }
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn