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

Langage PHP Discussion :

blocs try/catch en PDO


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 577
    Points : 803
    Points
    803
    Par défaut blocs try/catch en PDO
    Bonjour,
    J'au une difficulté de compréhension du fonctionnement d'un bloc try/catch avec PDO.
    J'ai le code suivant:
    Code php : 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
    function saveFormations($id, $string) {
    	global $db;
     
    	$query = "
    		UPDATE dat_users
    		SET formations=:string
    		WHERE id=:id
    	";
    	try {
    		$result = $db->prepare($query);
    		$result->bindParam('id', $id);
    		$result->bindParam('string', $string);
    		$result->execute();
    	}
    	catch (Exception $e) {
    		if (IS_LOCAL) die($e->getMessage);
    		else return false;
    	}
    	return true;
    }
    Dans ce code, où faut-il placer le return true;
    Faut-il le mettre à la fin comme ici ou dans le bloc try. Dans ce cas, n'y a t'il pas un risque de renvoyer la valeur true avant que l'exception ne soit lancée?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il faut réviser le fonctionnement des exceptions

    Le principe de base c'est :
    1. le script execute tout ce qu'il peut dans le try.
    2. Dès que quelque chose dans le try lance une exception, on arrête de traiter le contenu du try, et on commence à traiter le contenu du catch correspondant à l'exception
    3. (Optionnel) Si il y a un finally, on traite tout ce qui se trouve dans le finally qu'il y ait une exception ou pas
    4. On traite ce qui se trouve après le bloc try/catch(/finally)


    Donc dans ton cas :
    1. On exécute la requête.
    2. Si elle plante, on traite le catch donc soit die, soit return false
    3. Si elle ne plante pas, on sort du try/catch et on traite ce qu'il y a après, donc return true.


    Ce qui m'a l'air de correspondre à ce que tu attends.

    A noter que tu pourrais aussi l'écrire ainsi :
    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
    function saveFormations($id, $string) {
        global $db;
     
        $query = "
            UPDATE dat_users
            SET formations=:string
            WHERE id=:id
        ";
        try {
            $result = $db->prepare($query);
            $result->bindParam('id', $id);
            $result->bindParam('string', $string);
            $result->execute();
            // si on arrive ici, c'est que l'exécution s'est bien passée
            return true;
        }
        catch (PDOException $e) {
            if (IS_LOCAL) die($e->getMessage);
            // Si pas local, on ne fait rien (c'est pas terrible, il faudrait faire un log du message d'erreur)
        }
        // si on arrive ici, c'est qu'il y a eu un problème dans le try et qu'on n'est pas arrivés jusqu'au return true
        return false;
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tout d'abord ,
    faire un die dans un try /catch annule complètement l'intérêt du try/catch qui te permet en principe de gérer correctement un potentiel cas d'erreur. La si erreur tu coupe tout comme un cochon

    Ceci étant dit que tu place ton return true à la fin du try ou à la fin de ta fonction n'a pas d'importance, le fonctionnement sera le même.
    Je préfère le faire dans le try et dans le catch pour des raison de lisibilité , mais c'est pas obligatoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
        $result = $db->prepare($query);
        $result->bindParam('id', $id);
        $result->bindParam('string', $string);
        $result->execute();
        return true;
    }
    catch (Exception $e) {
        return false;
    }
    Dans ce cas, n'y a t'il pas un risque de renvoyer la valeur true avant que l'exception ne soit lancée
    Non , pas possible, dès qu'une des instructions lève une exception le code passe dans le catch.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 577
    Points : 803
    Points
    803
    Par défaut
    Merci à vous deux!

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/10/2010, 17h06
  2. Visibilité de mon tableau dans bloc try catch
    Par erox44 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/05/2010, 15h13
  3. répétition d'un bloc try/catch
    Par hadler dans le forum Général Java
    Réponses: 4
    Dernier message: 03/12/2009, 15h09
  4. Le Bloc Try/Catch
    Par freestyle59 dans le forum Langage
    Réponses: 2
    Dernier message: 25/03/2009, 14h17
  5. Faire un return dans un bloc try catch
    Par alizee971 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/08/2008, 19h38

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