Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der PHP-Transaktionsverarbeitung

Detaillierte Erläuterung der PHP-Transaktionsverarbeitung

怪我咯
怪我咯Original
2017-07-12 16:29:034593Durchsuche

MySQL-Transaktionen werden hauptsächlich zur Verarbeitung von Daten mit großen Vorgängen und hoher Komplexität verwendet. Wenn Sie beispielsweise im Personalverwaltungssystem eine Person löschen, müssen Sie nicht nur die Basisinformationen der Person, sondern auch die mit der Person verbundenen Informationen wie Postfach, Artikel usw. löschen . Auf diese Weise stellt dieseDatenbankoperation eine Transaktion dar!

1. Übersicht über die PHP-Transaktionsverarbeitung:

Transaktion: ist eine Sammlung mehrerer Ereignisse
Transaktion Verarbeitung: Die Transaktion wird nur ausgeführt, wenn alle Ereignisse erfolgreich ausgeführt werden können. Wenn ein Ereignis nicht erfolgreich ausgeführt werden kann, werden andere Ereignisse der Transaktion nicht ausgeführt.

Solange Ihre MySQL-Version BDB- oder InnoDB-Tabellentypen unterstützt, verfügt Ihr MySQL über Transaktionsverarbeitungsfunktionen. Unter ihnen ist der InnoDB-Tabellentyp der am häufigsten verwendete. Obwohl Dinge, die MySQL unglücklich machten, wie die Übernahme von InnoDB durch Oracle, später passierten, haben solche Geschäftsereignisse nichts mit der Technologie zu tun Lassen Sie uns kurz über die Transaktionsverarbeitung in MySQL sprechen.

2. PHP-Transaktionsverarbeitungscode:

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

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Transaktionsverarbeitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn