Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/04/2006, 14h22   #1
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Par défaut État d'une transaction

Bonjour,

Est ce possible avec la librairie PDO (abstration de données) de savoir si une transaction a été commencée sur une connexion ou non ...

J'ai besoin de ça pour faire le cas échéant un rollback() quand une exception est levée.

En gros j'aimerais bien faire un genre de

Code :
1
2
3
4
5
6
7
8
9
10
11
try {
   ...
}
catch(exception $ex) {
   if($pdoConnexion->isActiveTrans())
   {
      $pdoConnexion->rollback();
   }
 
   echo $ex->getTraceAsString();   
}
Je n'ai pas trouvé dans la lib ce genre de fonction ...

Merci de vos idées ...
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2006, 17h07   #2
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 43
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2006
Messages : 43
Points : 25
Points : 25
Avec ce que j'ai compris, c'est toi qui décide quand commence une transaction [beginTransaction()] et quand elle se termine [commit()].
Ensuite le rollBack() se met en action tout seul dès qu'une des requêtes SQL comprises entre le début et la fin de la transaction rencontrent un problème.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try 
    {    
        // DEBUT DE LA TRANSACTION
        $pdoConnexion->beginTransaction();
 
        // LES REQUETES SQL A EXECUTER
 
        // FIN DE LA TRANSACTION        
        $pdoConnexion->commit();
    }
catch (PDOException $ex)
    {
        // ANNULATION EN CAS D'ERREUR
        $pdoConnexion->rollBack();
        echo "ERREUR : problème lors de l'insertions des données";
    }
Sinon j'ai ouvert un post au sujet des retour d'expériences sur PDO, si tu veux bien y participer, cela pourrait être sympa
C'est ici
Philsmile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2006, 18h09   #3
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
En fait quelques cas se produisent où une exception est levée alors que la transaction n'a pas commencée (par exemple à l'initialisation de la connexion)

Dans ce cas de figure j'aimerais savoir si j'ai démarré ou non une transaction. (pour faire un rollback ou non).

Pour ce qui est du retour d'expérience je regarde ça ... en tout cas merci d'avoir répondu
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 09h16   #4
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 43
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2006
Messages : 43
Points : 25
Points : 25
Si une exception est lancée lors de l'initialisation de la connection, il n'y a pas de connection et la transaction n'a pu commencer... Tu n'as qu'à mettre tout dans le Try (déclaration de ta connection et toute ta transaction) et à la moindre erreur, le Catch prend le relais...

Regarde l'exemple 5 de PDO sur coolcoyote.net : lien.

J'espère avoir bien compris ton problème et avoir pu t'aider

Bien à vous tous...
Philsmile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 09h44   #5
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Tous mes traitements DB ou autres sont dans des classes. Si un de mes traitement (la lecture de mon fichier de configuration par exemple) merde, une exception est levée et je récupère ça dans mon catch.

Dans mon catch je voudrais, dans le cas où je suis en train de toucher à ma base, pouvoir passer ou non mon rollback.

Désolé si je ne m'explique pas super bien !!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
    $oPanierDb = new PanierDb();
        try {
            $oPanierDb->connect($pdo_str_conn, MYSQL_USER, MYSQL_PWD);
            echo 'connexion ok !!!<br />';
            $oPanierDb->begintrans();
 
            $oPanierDb->addFolder('TEST FOLDER', 28, 'DUPONT');                
            $oPanierDb->commit();
            echo 'Dossier ajouté !! <br />';
 
        } 
        catch (Exception $ex){
            ExceptionRender::render($ex);
            $oPanierDb->rollback();  // Je voudrais bien savoir si une transaction a débutée     
            exit(-1);
        }
Je pourrais faire plusieurs try catch ...
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 10h45   #6
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 43
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2006
Messages : 43
Points : 25
Points : 25
Tu peux effectivement faire plusieurs catch selon les différentes erreurs rencontrées. Pour ma part, je n'ai pas encore mis cela en place, mais cela m'intéresse. Il faut tester...
Philsmile est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h07.


 
 
 
 
Partenaires

Hébergement Web