Maison  >  Article  >  développement back-end  >  Exemple d'opération de traitement de transaction PDO en PHP

Exemple d'opération de traitement de transaction PDO en PHP

不言
不言original
2018-05-02 16:40:122437parcourir

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 transaction

La 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 innoDB

mysql> 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!

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