Bonjour à tous,
J'essaye de faire une transaction mais lorsque une exception est levée le rollback ne se fait pas sur la totalité des requêtes effectuées.
Pour le vérifier j'ai volontairement introduit une erreur lors du 2eme passage de ma boucle foreach pour que la clause WHERE du UPDATE n'existe pas.
l'exception est bien levée, le rollback se fait en partie et annule le "INSERT INTO factures_vendeurs..." mais le premier "UPDATE clients..." n'est pas annulé, les valeurs modifiées sont toujours présentes dans la table client.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 $dbh1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh1->beginTransaction(); try{ // DEBUT DE TRANSACTION $query_inFacture="INSERT INTO factures_vendeurs SET date='".date('Y-m-d')."', IDVendeur=".$IDvendeur.", IDClients='".$clientBdd."', actis='".$refBdd."', type='".$typeBdd."', guidAcc=".$guidAcc.", montant='".$montantBdd."'"; $dbh1->exec($query_inFacture); $IDFacture=$dbh1->lastInsertId(); foreach($tabClient as $key=>$value){ $query_rsClient="SELECT revendPaye, typeRef, IDRef FROM clients WHERE ID=".$value; $rsClient=$dbh1->query($query_rsClient); $row_rsClient = $rsClient->fetch(PDO::FETCH_ASSOC); // ici traitement des données if($k==0)$query_rsMajClient="UPDATE clients SET revendPaye='".$majPaye."' WHERE ID=".$value; else $query_rsMajClient="UPDATE clients SET revendPaye='".$majPaye."' WHERE ID=xx"; $k++; $dbh1->exec($query_rsMajClient); }; $dbh1->commit(); } catch(Exception $e){ echo $e->getMessage(); $dbh1->rollBack(); }; // FIN DE TRANSACTION
est-il bien possible de revenir en arrière sur plusieurs requêtes dans la même table ?
Merci d'avance pour vos réponses
Partager