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