Maison >développement back-end >tutoriel php >Explication détaillée des étapes pour utiliser les transactions PDO en PHP

Explication détaillée des étapes pour utiliser les transactions PDO en PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-16 11:16:071599parcourir

Cette fois, je vais vous donner une explication détaillée des étapes d'utilisation des transactions PDO en PHP. Quelles sont les précautions pour utiliser les transactions PDO en PHP. Voici des cas pratiques, jetons un coup d'œil.

Résumé :

Traitez plusieurs opérations SQL (ajout, suppression, modification) comme une seule unité d'opération, soit toutes réussissent, soit toutes échouent.

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 l'exception Invite, puis revenez en arrière

④ Activez la soumission automatique

Remarque : .

Seul le pilote InnoDB de mysql prend en charge le traitement des transactions. Le pilote MyIsAM par défaut ne le prend pas en charge

Exemple :

Je pense que vous avez lu le cas dans cet article. Vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
<?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

Lecture recommandée :

Explication détaillée des étapes d'utilisation de curl pour copier IP et référence en PHP


Explication détaillée des étapes d'implémentation de la file d'attente de messages avec PHP+MySQL

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