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

Explication détaillée du traitement des transactions PHP

怪我咯
Libérer: 2023-03-13 19:14:01
original
4606 Les gens l'ont consulté

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";
 }
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal