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 :

Tester la gestion des erreurs


Sujet :

PHP & Base de données

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut Tester la gestion des erreurs
    Bonsoir, vu que PDO crée une exception en cas d'erreur, je pensais qu'envoyant plusieurs fois la même requête de création de la même table, j'aurais une exception et apparemment non. Peut-on me dire pourquoi ?

    testforumpoo.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    include 'MyClassLogin.php';
     
    try{
    $login=new login();
    $login->test_connexion();
    }catch(PDOException $e){
    	echo "argggggggggggggg".$e->getMessage();
    }
    ?>
    MyClassLogin.php :
    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
    <?php
    session_start();
    class login extends PDO {
       public $id_login;
       public $login;
       public $pwd;
       public $connecte;
       public $mail;
       public $notif;
     
       static public $DB_NAME = "---";
       static public $HOST = "---";
       static public $USER = "---";
       static public $PASS = "---";
     
    // le constructeur de login appelle le constructeur de PDO en lui passant ses paramètres	
    function __construct() {
    parent::__construct('mysql:host=' .login::$HOST . ';dbname=' . login::$DB_NAME, login::$USER, login::$PASS);
    }
     
       public function test_connexion() {
       $sql="CREATE TABLE espion (id_espion MEDIUMINT UNSIGNED AUTO_INCREMENT, espion VARCHAR(30) NOT NULL,PRIMARY KEY(id_espion));";
     
     
    	try{
     $this->query($sql, PDO::FETCH_OBJ);
     echo "envoi requete<br>";
     
    }catch(PDOException $e){
    	echo "argggggggggggggg".$e->getMessage();
    }
       }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Es tu sur d'avoir bien cerné(e) la gestion des erreurs, avec try et catch, et de même comment construire une classe abstraite pour les requêtes sur la bdd?

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    A vrai dire, ni l'un ni l'autre, sachant que je viens de suivre une formation (fort intéressante) sur la POO en PHP, et que j'y ai notamment découvert le try/catch. J'ai donc cherché à m'inspirer d'un code qui marche pour créer le mien. Mais si ce que j'ai fait n'est pas bon, tout éclaircissement serait bienvenu.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Class mysqlPdo

    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
    91
    92
    93
    94
    <?php
    class bdd extends PDO 
    {
    final public function __construct($dsn, $username = '', $password = '', $driverOptions = array())
        {
            $driverOptions += array(self::ATTR_ERRMODE => self::ERRMODE_EXCEPTION,
    	self::ATTR_STATEMENT_CLASS => array('Statement'),PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8' ");
            parent::__construct($dsn, $username, $password, $driverOptions);
        }
    }
    class Statement extends PDOStatement 
    {
     
    } 
     
    abstract class _mysqlPdo
    {
     
        public function result($array)
        {
            return $array;
        }
     
        protected  function connect()
        {
            try {
            $dbh = new bdd('mysql:host=localhost;dbname=mabasededonne', 'root','');
    	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            catch (PDOException $e) {
            throw new Exception("Error occured while saving your object", null, $e);
            }
            return $dbh;
        }
     
        private function _bindParam($sth,$array){
     
        }   
        private function _prepare(){
     
        }
        private function _execute(){
     
        }
        protected  function _query($query,$array )
        {
     
            $id=0;
            $dbh = $this->connect();
            if($query==='' || ( isset($this->curentQuery) && $query===$this->curentQuery) ){
                $sth = $this->curentQuery;
            }else{
                $sth = $dbh->prepare($query);
                $this->curentQuery = $sth;
            }
    	    if(!empty($array)){
    		foreach($array as $key =>$v ){
    		$sth->bindValue( ':'.$key ,$v);
    		}		
    	    }
             try {  
     
    		  $sth->execute();
    			 if(substr_count($sth->queryString,'SELECT')>0 && substr_count($sth->queryString,'INSERT')==0 )
    			 {
    			 return $this->result($sth->fetchAll(PDO::FETCH_CLASS,'mysqlPdo'));
    			 }
    			 else{
    			 return $dbh;
    			 }
    		  }
    	   catch (PDOException $e) {
    	   JUSC_Exception::message( $e->getMessage());		
    	   }  
     
        }
     
        abstract public function query($query,$array );
     
        }
     
        class mysqlPdo extends _mysqlPdo
        {
     
    	   public function query($query,$array )
    	   {
    	    return $this->_query($query,$array );
    	   }
     
        }
     
     
     
    ?>

    requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $bdd = new mysqlPdo;
    $uniqueID = 'S101';
    $table_name = 'user';
     $index   =  $bdd->query("SELECT nom,prenom,adresse,ville,cp,email FROM $table_name WHERE uniqueId = :uniqueID" , array('uniqueID'=>$uniqueID )) ;
    ;
    print_r($index);

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Pour que PDO lance des Exceptions en cas d'erreurs pour pouvoir ensuite les attraper avec des try/catch il faut le définir parmi les options.
    Par défaut c'est en mode "silence" (PDO::ERRMODE_SILENT).

    La doc de Php : PDO : Les erreurs et leur gestion

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $options = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    );
    $dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'pass', $options);
    Après, libre à chacun de créer une abstraction ou pas (il n'y a pas obligation).

    sachant que je viens de suivre une formation (fort intéressante) sur la POO en PHP, et que j'y ai notamment découvert le try/catch
    Dans cette formation, on ne t'a pas dit qu'il y a une doc en ligne (hormis les moteurs de recherche) ?

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Dans cette formation, on ne t'a pas dit qu'il y a une doc en ligne (hormis les moteurs de recherche) ?
    Non, sachant qu'elle portait surtout sur la POO et que PDO n'a été juste que survolé (et encore sur ma demande, car ce n'était pas au programme) ; mais vos réponses semblent très complètes ; je prendrai le temps de les étudier et reviendrai ici pour en rendre compte. Déjà, merci.

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par laurentSc
    mais vos réponses semblent très complètes
    Non, elles sont très loin d'être complètes (voire pas du tout) car la gestion des erreurs et des Exceptions est un long sujet, c'est en général un concept qu'on met en place sur l'ensemble d'un projet.
    Il y a donc une vrai "politique" à mettre en place, et là aussi en général ça se défini très tôt dans la création du projet.

    En somme, ça ne s'arrête pas à quelque lignes de codes juste pour PDO.

    Il te faut éplucher la doc / tuto / bouquin sur la gestion des erreurs (tout court) pour savoir à quoi ça sert, et comment ceci sera vraiment pertinent (donc bien géré), à la fois pour les internautes et le(s) développeur(s)/codeur(s).

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Il te faut éplucher la doc / tuto / bouquin sur la gestion des erreurs (tout court) pour savoir à quoi ça sert, et comment ceci sera vraiment pertinent (donc bien géré), à la fois pour les internautes et le(s) développeur(s)/codeur(s).
    J'ai visiblement encore beaucoup à apprendre ; as-tu un lien vers un tuto ou une référence de bouquin ?

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai visiblement encore beaucoup à apprendre ; as-tu un lien vers un tuto ou une référence de bouquin ?
    Si tu débute en POO c'est clair le chemin est encore long.

    Mais il y a un truc qu'il faut apprendre c'est : Chercher
    Sinon tu vas galérer, perdre un temps fou.

    En plus, apprendre à faire du Web sur le Net, c'est la voie royale, c'est la Mecque, on est au coeur du sujet
    C'est impossible de ne rien trouver la dessus.

    Je n'ai pas de lien, ni de tuto car tout mon apprentissage c'est fait au feeling en faisant des recherches sans garder la moindre trace à l'époque (et ça remonte).

    Ceci dit, là où j'ai énormément appris c'est en décortiquant certains CMS et autre FrameWork (Open Source).
    Là encore il y a pleins de cas pratique.

    Bref ... tu as une autoroute juste devant toi, faut juste y aller.
    Cerise sur le gâteau : il n'y a pas de péage.

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    D'ailleurs en rentrant "gestion des erreurs php" dans google tu as pas mal de réponses.
    D'un autre côté n'essaies pas de tout connaître avant de commencer car les erreurs se gèrent différemment suivant le contexte.
    Le minimum à savoir en abordant un code est de savoir faire générer les erreurs qui te permettront de débugguer.
    Pour le reste "un concept qu'on met en place sur l'ensemble d'un projet" n'en fait pas un prérequis pour commencer car on ne peut vraiment définir cela qu'avec de l'expérience.

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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