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 :

Débutant PDO gestion error [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut Débutant PDO gestion error
    Bonjour,

    Voila on m’a conseillé de mettre un élément champ privé error dans mes bases SQL ainsi que dans mes classes qui permettra d’enregistrer des infos des erreurs éventuelles.

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


    On m'a dit de m’intéresser au PDO mais c’est vrai que c’est reprendre un nouveau langage donc un peu long mais j’espère apprendre rapidement.

    Comment repartir sur de bonne base au niveau de ma base doit enlever l'attribut error des mes tables?
    J'ai changer ma première 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 débute peut on me dire si cela est correct merci?
    Et dois-je laisser le false et le true?

    merci de vos conseils.

  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
    Par défaut
    Salut

    Le minium (syndical) aurait été d'essayer avant de demander si c'est correcte ou pas, ça évite que ce soit nous qui perdons du temps à voir certaines erreurs évidentes.

    Tu as un mysql_close($db) qui traine qui devrait provoquer une erreur, chose qui se voit tout de suite.
    Puis tu exécute la requête, ok, mais tu récupère nulle part les données, là aussi ça devrait provoquer illico une erreur vu que le tableau $value n'existe pas.

    Commence d'abord par tester ton code, non ?

    Il y a la doc, et des exemples :
    PDO : http://fr2.php.net/manual/fr/class.pdo.php
    PDO::execute : http://fr2.php.net/manual/fr/pdostatement.execute.php
    Exemple :
    http://php.developpez.com/faq/?page=pdo


    est doit je laisser le false et le true?
    Il n'y a pas d'obligation, c'est toi qui décide selon ce que tu veux faire et obtenir.

  3. #3
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    bonjour,

    excuse moi j'aurais du mettre les message d'erreur:

    Notice: Undefined variable: connexion in C:\wamp\www\e-commerceversionphpsolutions\class\class.users.php on line 31

    Fatal error: Call to a member function query() on a non-object in C:\wamp\www\e-commerceversionphpsolutions\class\class.users.php on line 31
    voici ma page connexion que je fait appel:
    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
    <?php
     
    $PARAM_hote='localhost'; // le chemin vers le serveur
    $PARAM_port='3306';
    $PARAM_nom_bd='ecommerce'; // le nom de votre base de données
    $PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
    $PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter
     
    try
    {
            $connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
    }
     
    catch(Exception $e)
    {
            echo 'Une erreur est survenue !';
            die();
    }
     
     
    ?>

  4. #4
    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
    Le code de la connexion s'effectue où ?

    En tout cas, l'erreur dit que $connexion n'est pas défini, n'existe pas.
    Normal, la méthode objet::load() ne connait pas $connexion, c'est un problème de portée, de visibilité.

    C'est l'un des problème que l'on rencontre avec PDO, car on a pris (la mauvaise) l'habitude avec les fonctions mysql_* que la connexion se faisait automatiquement sur la dernière connexion effectuée, donc il n'était pas nécessaire de refaire une connexion dans les fonction ou méthodes classe, chose qui ne se fait pas avec PDO.

    Les choses redeviennent normales si on peu dire, c'est à dire que par défaut, les variables extérieures ne sont pas visibles dans les fonction ou classes.

  5. #5
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    donc je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $connexion = new PDO("mysql:host=$PARAM_hote;dbname=$PARAM_nom_bd",$PARAM_utilisateur,$PARAM_mot_de_passe);
    Dans la fonction est ce que je dois le faire donc a chaque fois pour la connexion bdd? et la page connexion.php ne sert à rien?

    La page de connexion était inclut dans l index.php qui appelait justement cette fonction de cette classe.

  6. #6
    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
    donc je doit faire :

    $connexion = new PDO("mysql:host=$PARAM_hote;dbname=$PARAM_nom_bd",$PARAM_utilisateur,$PARAM_mot_de_passe);

    dans la fonction est je doit le faire donc a chaque fois pour la connexion bdd?et la page connexion.php ne sert a rien?

    la page de connexion etait inclut dans l index.php qui appellait jsutement cette fonction de cette classe.
    Il n'y a pas obligation, il existe plusieurs moyens, plusieurs solutions.
    Cependant, j'estime que c'est à toi de choisir la façon de procéder, puis je ne connais pas toutes les différentes façon de faire, c'est certain.

    Mais d'abord, tu parle de fonction en allusion avec load(), mais apparemment ce n'est une fonction, c'est une méthode, car il s'agit d'une classe (on dit méthode de classe).
    Utilise les bons mots, ça évite les confusions.

    Aussi, tu donne comme nom $connexion, mais ce n'est pas juste une connexion, $connexion est un Objet PDO (ce n'est pas tout à fait la même chose).

    - La manière la plus simple c'est de rendre l'Objet PDO global, donc de le déclarer dans la méthode Objet::load() -> global $connexion;
    - Un autre consiste à le transmettre en paramètre : function load($pdo, $id)
    - Encore une est de faire une nouvelle connexion dans la classe qui contient la méthode load() (peut être la moins bien)
    - Une autre encore consiste à créer une classe PDO (MyPDO) qui se charge de créer de manière static un Objet PDO, et en parallèle une méthode static (genre getInstance) qui permettra de récupérer cet Objet PDO partout dans son code (fonction, classe, méthode), tout ça en conservant le même Objet. On dit que cette classe est un singleton.


    Bref, le problème ici et en fin de compte la même que n'importe quel Objet, il faut donc l'aborder de la même manière.
    Après, vient le problème sur la dépendance entre Objets, mais là c'est un autre débat.


    Mais comme tu découvre tout juste PDO, je te conseille de faire certes des essais, mais ne rien prévoir de définitif, car utiliser PDO ainsi, donc de manière très procédural, et bien quelque par tu ne profitera pas ce que la POO peu offrir, entre autre PDO.
    Fais des recherche, dans ce forum PDO entre autre, et tu trouveras des script (très souvent des singletons) qui permettent d'exploiter un peu plus PDO.
    En somme, créer une classe dérivée de PDO me semble très nettement plus pratique, il est là à mon sens tout l'intérêt.

    Puis peut être ne pas confondre vitesse et précipitation.
    Tu découvre PDO, et bien prend le temps de lire les docs, etc ...

  7. #7
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut function pdo pas tres claire
    merci

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    je te conseil en plus d'activer la gestion des erreurs pour PDO :

    http://www.php.net/manual/fr/pdo.err...ling.php#82705


    le mode warning marche un peu comme le trace_mode de mysql_*

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

Discussions similaires

  1. [Débutant] [UC] Gestion d'accidents
    Par ptit_tof57 dans le forum Cas d'utilisation
    Réponses: 4
    Dernier message: 11/03/2008, 15h45
  2. [Data] [débutante][spring][ibatis] Error parsing XML
    Par stardust dans le forum Spring
    Réponses: 4
    Dernier message: 12/12/2006, 17h58
  3. [Débutant] - VB6 - Gestion des impressions
    Par LSG-Serval dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/08/2006, 15h32
  4. Débutant : Pb gestion des chaines...
    Par SebRs dans le forum C++
    Réponses: 3
    Dernier message: 29/03/2006, 15h13
  5. [Débutant] [JComboBox] Gestion de doublons
    Par nounetmasque dans le forum Composants
    Réponses: 2
    Dernier message: 04/05/2005, 15h08

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