Maison > Article > développement back-end > Exemple d'opération de traitement de transaction PDO en PHP
Cet article présente principalement l'opération de traitement des transactions PDO en PHP et analyse les étapes de l'opération de traitement des transactions MySQL, les compétences de mise en œuvre et les précautions associées de PDO utilisant PDO sous forme d'exemples. Les amis dans le besoin peuvent s'y référer
<.> Cet article décrit l'opération de traitement des transactions PDO en PHP avec des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :Résumé :
Traitez plusieurs opérations SQL (ajouter, supprimer, modifier ) en tant qu'unité opérationnelle, soit ils réussissent tous les deux, soit ils échouent tous les deux. Une seule donnée ne nécessite pas de traitement de transactionLa table exploitée doit être une table de type innoDB (prenant en charge les transactions)Types de tables MySQL couramment utilisés : MyISAM ( ajout, suppression et modification non transactionnel Vitesse rapide, sécurité InnodB (transactionnelle) élevée Changer le type de table en type innoDBmysql> alter table stu engine=innodb;
Utilisation :
Ajouté sur la base du prétraitement PDO, au format suivant :try{ $m->beginTransaction();//开启事务处理 //PDO预处理以及执行语句... $m->commit();//提交事务 }catch(PDOException $e){ $m->rollBack();//事务回滚 //相关错误处理 }
Exemple :
$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("提交失败!"); }
Supplément : Un autre exemple d'analyse du traitement des transactions MySQL et de l'opération de restauration à l'aide de PDO en PHP
Aperçu :
Transaction (transaction) Est composé d'une séquence d'instructions de requête et/ou de mise à jour. Utilisez start, start transaction pour démarrer une transaction, rollback pour annuler la transaction et commit pour valider la transaction. Après le démarrage d'une transaction, il peut y avoir plusieurs requêtes SQL ou instructions de mise à jour. Après que chaque SQL
soit soumis pour exécution, il doit également y avoir des instructions pour déterminer si elle est exécutée correctement afin de déterminer s'il faut revenir en arrière à l'étape suivante. tous sont exécutés correctement, validez enfin la transaction.
Une fois la transaction annulée, la base de données restera dans l'état avant le démarrage de la transaction. Tout comme si vous quittez un fichier modifié sans l'enregistrer, l'apparence originale du fichier sera naturellement conservée.
Ainsi, une transaction peut être considérée comme une opération atomique, et le SQL de la transaction sera exécuté entièrement ou pas du tout.
Étapes de traitement des transactions MYSQL pour PDO en PHP :
① Désactivez la soumission automatique ② Activez le traitement des transactions③ . S'il y a une exception, lancez automatiquement une invite d'exception et annulez
④ Activez la soumission automatique
Remarque :<.>mysql n'a que cet InnoDB. Le pilote prend en charge le traitement des transactions, mais le pilote MyIsAM par défaut ne le prend pas en charge
Exemple :
Connexe. recommandations :
<?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
Pensées provoquées par protégé dans php
Solution à la situation où PHP PDO insère un morceau de données et deux données apparaissent à plusieurs reprises
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!