IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Utiliser Rollback [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Par défaut Utiliser Rollback
    Bonjour,

    je voudrais inscrire dans une base de données un ensemble de données, via plusieurs requetes.

    Si une requete n'est pas correctement exécutée, je ne veux rien inscrire.

    J'utilise pour cela une transaction.

    J'aurai voulu savoir comment arrêter un script lorsque une requete est mal exécutée de telle manière a ce que je n'arrive jamais au
    qui valide la transaction en fin de script

    J'utilise l'approche objet PDO pour realiser les requetes.

    Merci de votre aide.


  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Cela dépend de la gestion des erreurs que vous avez mis en place avec PDO (attribut PDO::ATTR_ERRMODE). Soit vous utilisez les erreurs classiques (par défaut siliencieuses ou PDO::ERRMODE_WARNING pour que PHP émette une erreur E_WARNING) et vous testez les retours de chacune des méthodes PDO pour mettre ou non fin au script soit vous utilisez les exceptions (PDO::ERRMODE_EXCEPTION).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # (try/catch facultatif si le comportement par défaut de PHP et PDO convient)
    try {
        $dbh = new PDO(DSN, LOGIN, MOT_DE_PASSE, $options);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
        $dbh->beginTransaction();
     
        // opérations
     
        $dbh->commit(); // Validation de la transaction
    } catch (PDOException $e) {
        // Une erreur ? Fin du script et la transaction n'est pas validée (implicitement PDO opère un rollback par défaut)
        die(sprintf("%s dans %s à la ligne %d : %s", get_class($e), $e->getFile(), $e->getLine(), $e->getMessage()));
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Par défaut ok...
    j'ai utilise la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        $dbh = new PDO(DSN, LOGIN, MOT_DE_PASSE, $options);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $dbh->beginTransaction();
     
        // opérations
     
        $dbh->commit(); // Validation de la transaction
    } catch (PDOException $e) {
        $dbh->RollBack();
    }
    C'est bon comme ca?

    puis je ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (PDOException $e) {
    die($dbh->RollBack());
    }
    a la fin?

    merci de votre aide.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Oui sauf qu'étant donné que la méthode rollback renvoie un booléen, cette valeur n'est ensuite guère utile à die.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    } catch (PDOException $e) {
        $dbh->RollBack();
        exit; // die("Mon message d'erreur"); voir une valeur numérique en CLI
    }
    A noter que le constructeur de PDO est susceptible de lever une exception PDOException. Comme toute exception, à défaut de gestion, elle conduirait à la fin du script (erreur fatale).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Par défaut d'accord merci
    un grand merci Julp.

    A bientot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser rollback
    Par mapmip dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/08/2013, 23h01
  2. Comment utiliser un rollback
    Par Marie.B dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/07/2009, 17h06
  3. problème d'utilisation du commit/rollback
    Par xionz dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 12/06/2009, 14h54
  4. Utilisation du rollback
    Par kingbabylon dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 02/07/2008, 14h56
  5. [9i]Ne pas utiliser les rollback segments
    Par loudo dans le forum Oracle
    Réponses: 3
    Dernier message: 15/06/2006, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo