Beispiel für eine PDO-Transaktionsverarbeitung in PHP

不言
Freigeben: 2023-03-25 08:54:02
Original
2432 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich den PDO-Transaktionsverarbeitungsvorgang in PHP vor und analysiert die Schritte des MySQL-Transaktionsverarbeitungsvorgangs, die Implementierungsfähigkeiten und die damit verbundenen Vorsichtsmaßnahmen bei der Verwendung von PDO in Form von Beispielen

Dieser Artikel beschreibt den PDO-Transaktionsverarbeitungsvorgang in PHP anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Zusammenfassung:

Behandeln Sie mehrere SQL-Vorgänge (Hinzufügen, Löschen, Ändern). ) als eine Operationseinheit, entweder sind beide erfolgreich oder beide scheitern.

Ein einzelnes Datenelement erfordert keine Transaktionsverarbeitung

Die zu bedienende Tabelle muss eine Tabelle vom Typ innoDB sein (unterstützende Transaktionen)

In MySQL häufig verwendete Tabellentypen: MyISAM ( nicht-transaktional) Hinzufügen, Löschen und Ändern Schnelle Geschwindigkeit, hohe InnodB-Sicherheit (Transaktion)

Ändern Sie den Tabellentyp in den Typ innoDB

mysql> alter table stu engine=innodb;
Nach dem Login kopieren

Verwenden Sie:

Auf Basis der PDO-Vorverarbeitung das folgende Format hinzugefügt:

try{
$m->beginTransaction();//开启事务处理
//PDO预处理以及执行语句...
$m->commit();//提交事务
}catch(PDOException $e){
$m->rollBack();//事务回滚
//相关错误处理
}
Nach dem Login kopieren

Beispiel:

$m = new PDO($dsn,$user,$pwd);
$m->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
try{
$m->beginTransaction();//开启事务处理
$stmt=$m->prepare("insert into stu(name,sex,age,classid)values(?,?,?,?)");
$data=array(
array("user1",1,22,"lamp76"),
array("user2",1,20,"lamp76"),
array("user3",0,22,"lamp76")
);
foreach($data as $v){
$stmt->execute($v);
echo $m->lastInsertId();
}
$m->commit();
echo "提交成功!";
}catch(PDOException $e){
$m->rollBack();//回滚
die("提交失败!");
}
Nach dem Login kopieren

Ergänzung: Kommen Sie noch einmal Analyse eines Beispiels für MySQL-Transaktionsverarbeitung und Rollback-Vorgang mit PDO in PHP

Übersicht:

Transaktion besteht aus einer Abfrage und/oder einer Folge von Aktualisierungsanweisungen. Verwenden Sie „Begin“, „Start Transaction“
, um eine Transaktion zu starten, „Rollback“, um die Transaktion zurückzusetzen, und „Commit“, um die Transaktion festzuschreiben. Nach dem Starten einer Transaktion können mehrere SQL-Abfragen oder Aktualisierungsanweisungen vorhanden sein. Nach der Übermittlung jeder SQL
sollten auch Anweisungen vorhanden sein, um festzustellen, ob sie korrekt ausgeführt werden, um zu bestimmen, ob im nächsten Schritt ein Rollback durchgeführt werden soll Alle werden korrekt ausgeführt. Anschließend wird die Transaktion festgeschrieben.
Sobald die Transaktion zurückgesetzt wurde, verbleibt die Datenbank im Zustand vor dem Start der Transaktion. Ebenso wie wenn eine bearbeitete Datei ohne Speichern beendet wird, bleibt das ursprüngliche Erscheinungsbild der Datei selbstverständlich erhalten.
Eine Transaktion kann also als atomare Operation betrachtet werden und die SQL in der Transaktion wird entweder vollständig oder überhaupt nicht ausgeführt.

MYSQL-Transaktionsverarbeitungsschritte für PDO in PHP:

① Deaktivieren Sie die automatische Übermittlung

②. Aktivieren Sie die Transaktionsverarbeitung

③ . Wenn es eine Ausnahme gibt, wird automatisch eine Ausnahmeaufforderung ausgelöst und ein Rollback ausgeführt

④ Automatische Übermittlung aktivieren

Hinweis:

MySQL verfügt nur über diesen InnoDB-Treiber, der die Transaktionsverarbeitung unterstützt, der Standard-MyIsAM-Treiber jedoch nicht

Beispiel:

<?php
try{
//最后是关闭自动提交
$pdo=new pdo("mysql:host=localhost;dbname=mydb","root","root", array(PDO::ATTR_AUTOCOMMIT=>0));
//这个是通过设置属性方法进行关闭自动提交和上面的功能一样
//$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
//开启异常处理
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
/*
* 事务处理
*
* 张三从李四那里买了一台 2000 元的电脑
* 从张三帐号中扣出 2000元
* 向李四账号中加入 2000元
* 从商品表中减少一台电脑
* MyIsAM InnoDB
*/
try{
$pdo->beginTransaction();//开启事务处理
$price=500;
$sql="update zhanghao set price=price-{$price} where id=1";
$affected_rows=$pdo->exec($sql);
if(!$affected_rows)
throw new PDOException("张三转出失败");//那个错误抛出异常
$sql="update zhanghao set price=price+{$price} where id=3";
$affected_rows=$pdo->exec($sql);
if(!$affected_rows)
throw new PDOException("向李四转入失败");
echo "交易成功!";
$pdo->commit();//交易成功就提交
}catch(PDOException $e){
echo $e->getMessage();
$pdo->rollback();
}
//自动提交,如果最后不自动提交,转账是不成功的
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
//设置错误报告模式 ERRMODE_SILENT ERRMODE_WARNING
Nach dem Login kopieren

Verwandte Empfehlungen:

php Gedanken verursacht durch protected in

Lösung für die Situation, in der PHP PDO ein Datenelement einfügt und zwei Daten wiederholt angezeigt werden


Das obige ist der detaillierte Inhalt vonBeispiel für eine PDO-Transaktionsverarbeitung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!