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 :

gestion des erreurs avec mysql


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut gestion des erreurs avec mysql
    Bonjour,

    voila on m' a conseiller de mettre un element champ privé error dans mes base sql ainsi que dans mes classes qui permettera d enregistrer des infos des erreurs eventuelles.

    En rajoutant au méthodes et fonctions de retourner une valeur logique true si operation effectuées sinon false si erreur.

    Voici le modéle de class qu"on m'a donné.

    exemple:

    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
     
    <?php
    class category
    {
    public  $category_id;
    public  $category_name;
    private $error;
    ..
    function load($id)
    {
    if($db = sqlite _ open($sqlitePath, 0666, $this->
    error ))
    {
    $value = sqlite _ array _ query($db, "SELECT *
    FROM category WHERE category_id = '".$id."'");
    if(sqlite _ num _ rows($value) == 0)
    {
    $this->error = "L'utilisateur avec l'id
    précisé n'existe pas !";
    return false;
    }
     
    $this->category_id = $value['category_id'];
    $this->category_name = $value['category_name'];
     
    $this->error='';
    sqlite _ close($db);
    return true;
    }
    else
    {
    return false;
    }
    }
    function validate()
    {
    //nous vous laissons le soin de réaliser la fonction validate.
    //la fonction doit retourner false lorsque tous les champs demandés n'ont pas été renseignés
    return true;
    }
    function geterror()
    {
    return $this->error;
    }
    }
    ?>
    Petit probléme ce modéle qu'il ma donnée utilise du sqlLite et moi je veux utiliser du mysql, donc j ai changer comme ca:
    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
    <?php
     
    class category
    {
    public  $category_id;
    public  $category_name;
    private $error;
     
    function __constuct($id='')
    {
    if($id!='')
    $this->load($id);
    }
     
    function load($id)
    {
    if($db = mysql_select_db($sqlitePath))
    {
    $value = mysql_fetch_array($db, "SELECT *
    FROM users WHERE category_id = '".$id."'");
    if(mysql_num_rows($value) == 0)
    {
    $this->error = "La categorie avec l'id
    précisé n'existe pas !";
    return false;
    }
    $this->category_id = $value['category_id'];
    $this->category_name = $value['category_name'];
    $this->error='';
    mysql_close($db);
    return true;
    }
    else
    {
    return false;
    }
    }
     
    function add($category_id,$category_name)
    {
    $this->username = mysql_real_escape_string($category_id);
    $this->password = mysql_real_escape_string($category_name);
     
    if($this->validate())
    {
    if($db =  mysql_select_db($sqlitePath))
    {
    mysql_fetch_array($db, "INSERT INTO
    category (category_id,category_name) VALUES
    (NULL, ".$this->category_id.",".$this->category_name.");");
    mysql_close($db);
    return true;
    }
    else
    {
    return false;
    }
    }
    }
    function validate()
    {
    //nous vous laissons le soin de réaliser la fonction validate.
    //la fonction doit retourner false lorsque tous les champs demandés n'ont pas été renseignés
    return true;
    }
    function geterror()
    {
    return $this->error;
    }
    }
    ?>
    Pouvez vous me dire comment faire pour gerer cette attribut error mais pour mysql?

    MERCI.

  2. #2
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Tu vas me dire que c'est déjà fait, donc trop tard, mais à mon sens si on fait de la POO et qu'en plus on souhaite gérer les erreurs coté Bdd, alors je dirais que PDO s'impose, plutôt que les simple fonctions mysql_*.

    La raison est simple, c'est que PDO est une classe, donc on est déjà dans un contexte Objet, puis surtout, PDO intègre nativement les exceptions, ce qui évite de le soit même.


    Si tu souhaite faire une bonne gestion des erreurs, il faudrait déjà te pencher sur les fonctions set_error_handler() et surement aussi set_exception_handler().
    Le gros avantage ici, c'est le but d'ailleurs, c'est de se créer une classe générique pour gérer toutes les erreurs (sauf les erreurs fatales), donc pas seulement pour MySQL.
    Chaque erreur sera alors capturée par cette classe générique, il suffit donc de générer le message d'erreur comme on le veut.
    Plus besoin de or die(), de geterror() ou je ne sais quoi d'autre, tout est centralisé.
    De plus, on peu soit même générer ces propres erreur, suffit d'appeler la fonction trigger_error(), et l'erreur sera capturée par la gestion des erreurs centralisée, ce qui améliore le débuggage.
    Ceci me semble indispensable à un certain niveau.


    Après vient les exceptions, là à chacun de voir s'il est bon ou pas d'avoir aussi une classe générique pour gérer les erreurs d'exceptions.


    Ceci dit, ceci ne répond pas à ta question, mais si tu fais un musql_num_rows() tu devrais obtenir le nombre de ligne, non ?
    Qu'obtiens tu en faisant un geterror() ?
    (indenter le code serait pas mal )
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    MERCI.
    Je vais m interesser au PDO justement je regarder mais c est vrai que c est reprendre un nouveau language donc un peu long mais j 'espere apprendre rapidement.

    Mais alors comment repartir sur de bonne base au niveau de ma base doit enlever l'attribut error ?
    J'ai changer ma 1 fonction pour PDO :
    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
    <?php
    function load($id)
    {
     
    if($resultats=$connexion->query("SELECT *
    FROM users WHERE users _ id = '".$id."'"))
    {
     
    if($resultats->rowCount() == 0)
    {
    $this->error = "L'utilisateur avec l'id
    précisé n'existe pas !";
    return false;
    }
    $this->id = $value['users _ id'];
    $this->username = $value['users _ username'];
    $this->password = $value['users _ password'];
    $this->name = $value['users _ name'];
    $this->city = $value['users _ city'];
    $this->postcode = $value['users _ postcode'];
    $this->adress = $value['users _ adress'];
    $this->phone = $value['users _ phone'];
    $this->mail = $value['users _ mail'];
    $this->dname = $value['users _ dname'];
    $this->deliverycity = $value['users _
    deliverycity'];
    $this->deliverypostcode = $value['users _
    deliverypostcode'];
    $this->deliveryadress = $value['users _
    deliveryadress'];
    $this->discount = $value['users _ discount'];
    $this->nip = $value['users _ nip'];
    $this->error='';
    mysql_close($db);
    return true;
    }
    else
    {
    return false;
    }
    }
    ?>
    je debute peut on me dire si cela est correct merci?
    est doit je laisser le false et le true?

Discussions similaires

  1. Gestion des erreur avec aspSmartUpload
    Par zooffy dans le forum ASP
    Réponses: 2
    Dernier message: 07/12/2007, 09h39
  2. gestion des erreurs avec fichier .properties
    Par _momo dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/08/2007, 14h05
  3. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57
  4. Gestion des erreurs avec setjump/longjump
    Par gege2061 dans le forum C
    Réponses: 1
    Dernier message: 05/02/2006, 15h51

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