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 :

Redéfinir les exceptions de requête erronée


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut Redéfinir les exceptions de requête erronée
    Bonsoir à tous , je me demandais comment redefinir les exceptions, faut dire que le gros message :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02] ....
    est assez embêtant et j'aimerai le remplacer par quelque chose de plus court du genre " erreur en bsd " sans plus
    Comment procéder, j'ai une multitude de class et il me faut quelque chose de clair .
    Je procéde de cette façon pour mes requêtes (en gros)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->prepare("SELECT * FROM dbmachin WHERE machin = :machin");
    une idée ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    tu l'intitialises comment $dbh ?
    Utilises tu un modèle MVC avec un point d'entrée unique ?
    As tu penser à set_exception_handler ?

    a plus

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    c'est une fonction en faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function loaddata(){
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->prepare("SELECT * FROM dbmachin WHERE machin = :machin");
    			$stmt->bindParam(':machin',$this->machin, PDO::PARAM_STR);
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    			$stmt->closeCursor();
    			$stmt = null;
    		return $result;
    	}
    set_exception_handler j'y ai penser mais je voulais avoir un exemple simple pour redefinir les exception PDO et classique
    Utilises tu un modèle MVC avec un point d'entrée unique ?
    je n'ai pas compris la question, j'utilise un style de modele MVC simple pour l'instant je me forme avec le zendframework

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    Concernant $dbh, je m'attendais plutôt a une ligne du style $dbh = new PDO.

    pour les deux autres solutions, c'est dans le pire des cas, set_exception_handler doit pouvoir permettre de modifier l'exception juste avant de la mettre en stack.
    Un point d'entrée unique te permettrait, de l'entourer d'un try catch, et ainsi de modifier ces exceptions à leur émission, et juste avant qu'elle ne soit affichée.

    Mais la première solution, qui consiste a attraper ces exceptions dans une classe héritant de PDO, est plus adaptée si tu peux la mettre en place.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    voici la ligne lol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh = new PDO($host, $u, $p);
    Pour ce qui est de l'exception c'est vrai que j'aurai du l'entourer d'un block try
    comme ceci:
    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
     
    function loaddata(){
               global $host, $u, $p;
                            $dbh = new PDO($host, $u, $p);
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try{
    $stmt = $dbh->prepare("SELECT * FROM dbmachin WHERE machin = :machin");
    }catch (Exception $e) {
                $e->getMessage();
    }
    			$stmt->bindParam(':machin',$this->machin, PDO::PARAM_STR);
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    			$stmt->closeCursor();
    			$stmt = null;
    		return $result;
    	}
    Pour ce qui est d'une class héritant de pdo j'ai penser à un truc :

    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
    class ExtendsException extends Exception
    {
        public function __construct($msg=null, $code=0)
        {
            parent::__construct($msg, $code);
        }
     
        public function MysqlConnexion()
        {
            if ( ! $dbh = new PDO($host, $u, $p) )
            {
                throw new ExtendsException('Impossible de se connecter à MySQL');
            }
        }
        public function MysqlTable($sql)
        {
        	$dbh = new PDO($host, $u, $p);
        	if (!$stmt = $dbh->prepare($sql))
        	{
        		 throw new ExtendsException('Impossible de se connecter à MySQL');
        	}
        }
    }
    function exception_handler($ExtendsException)
    {
        $ExtendsException->MysqlTable();
    }
     
    set_exception_handler('exception_handler');
    Probléme je ne vois pas comment la mettre en place, je serai obliger de l'introduire dans chacune de mes class hors le coté pratique n'y est pas
    Une idée ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Ce que tu peux c'est créer une classe qui hérite de PDO, et redéfinir les méthodes qui provoque des exception, pour y ajouter un bloc try/catch, et dans le catch tu attrapes l'exception.
    A cote tu crées une classe d'exception qui étend de exception ou pdoexception.
    Cette class prend en param l'exception attrapée plus haut, et crée un nouveau message d'erreur lisible en fonction du code de l'exception.
    Dans le catch, ald de renvoyer une pdoexception, tu la transformes avec ta nouvelle classe d'exception. et c'est celle ci que tu laisses filer.

Discussions similaires

  1. [Exception]Comment gérer les exceptions ?
    Par Gildas Huart dans le forum Général Java
    Réponses: 7
    Dernier message: 29/03/2005, 18h01
  2. imprimer les exception
    Par deeal dans le forum Général Python
    Réponses: 2
    Dernier message: 05/01/2005, 16h16
  3. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    Réponses: 11
    Dernier message: 01/12/2004, 02h21
  4. [Exceptions] Pb avec les exceptions
    Par joquetino dans le forum Langage
    Réponses: 11
    Dernier message: 22/09/2004, 17h08
  5. Intercepter les 'Exceptions'
    Par Teo dans le forum ASP
    Réponses: 3
    Dernier message: 05/01/2004, 19h55

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