DEsole pour l'ionconvénient mais e sujet est à la base sur PHP:
http://www.developpez.net/forums/vie...024008#2024008
Aie aie aie, lors de ma transaction je lance des procedures stockées et lors du rollabck, rien n'est annulé !!!
Je m'explique.
Voici mon code
Code:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 Function prestationDelete($id) { global $smarty; /** * Déclaration du tableau qui contiendra les id d'objets * dont les images sont à supprimer */ $tabObjet = array(); /** * Lancement de la transaction qui va supprimé */ $db = &bddConnexionPGSQL(); $db->autoCommit(false); $res = $db->query("SELECT count(id_objet), nb_objets_max, nb_objets, pre.id_antiquaire ". "FROM prestations pre ". "INNER JOIN objet_commun oc ". "ON oc.id_antiquaire = pre.id_antiquaire ". "INNER JOIN antiquaire_client ac ". "ON pre.id_antiquaire = ac.id_antiquaire ". "INNER JOIN produits pro ". "ON pro.id_produit = pre.id_produit ". "WHERE pre.id_prestation = ".$id." ". "GROUP BY nb_objets_max, nb_objets, pre.id_antiquaire "); IF ( DB::isError($res) ) { $db->rollback(); return "Erreur dans la selection du nombre d'objets"; }ELSE{ $resPrest = $db->query("SELECT deleteprestation(".$_GET['id'].")"); IF ( DB::isError($resPrest) ) { $db->rollback(); return "Erreur dans l'execution de la procédure stockée : deleteprestation pour la prestation : ".$_GET['id']; } $row = $res->fetchRow(); $res->free(); $nbAnt = $row[0]; $nbMax = $row[1]; $nbPre = $row[2]; $suppr = $nbAnt - ( $nbMax - $nbPre ); echo $suppr." = $nbAnt - ( $nbMax - $nbPre )"; IF ($suppr > 0) { $res = $db->query("SELECT id_objet ". "FROM objet_commun ". "WHERE id_antiquaire = ".$row[3]." ". "ORDER BY date_modif ASC ". "LIMIT ".$suppr); IF ( DB::isError($res) ) { $res->free(); $db->rollback(); return "Erreur dans la selection d'un des objets"; }ELSE{ WHILE ( $row = $res->fetchRow() ) { $res2 = $db->query("deleteObjet(".$row[0].")"); IF ( DB::isError($res2) ) { $res->free(); $db->rollback; return "Erreur dans l'execution de la procédure stockée : deleteobjet pour l'objet ".$row[0]; }ELSE{ $tabObjet[] = $row[0]; } } $idObjet = reset($tabObjet); WHILE ( $idObjet != FALSE ) { /** * Suppression des images de l'objets */ $ret = unlink("../../img/chargimages/objets/".$idObjet."*"); IF (!$ret) { echo "Les images de l'objets $idObjet n'ont pas pu être supprimé. Veuillez le faire manuellement, merci."; } // SUPPRESSION DU CACHE $smarty->clear_cache(null,"Objet|".$idObjet); $idObjet = next($tabObjet); } $db->commit(); return TRUE; } }ELSE{ $db->commit(); return true; } } }
lorsque que j'ai une erreur avec la procedure stockée "deleteobjet", le rollback ne change rien. C'est comme si la transaction n'existait pas !!!
A l'aide !!
Partager