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 :

requête PDO en PDO pour le résultat. [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut requête PDO en PDO pour le résultat.
    Salut.

    J'arrive pas à faire afficher une donnée en fonction de mon objet. Mon id par défaut est 0 et je veux afficher via : $t->categorie(2) pour donner l'équivalent dans ma base. Ça me donne un chiffre 2 par ce que j'ai mis 2. Si je mets rien, en principe, ça devrait donner 0.

    Je veux pouvoir faire des requêtes en mettant $t->categorie(2).

    Quelqu'un peut m'aider?

    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
     
        class Cat{    
     
            private $_id = 0;
     
            public function categorie($cat){
     
                $db = new PDO("mysql:host=localhost;dbname=database", "root", "pass");
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
                $sth = $db->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = :id');
                $sth->bindParam(':id', $this->_id, PDO::PARAM_INT);
                $sth->execute();
     
                $rowCount = $db->query('SELECT FOUND_ROWS()');
                $rowCount = $rowCount->fetchColumn(); 
     
                while($row = $sth->fetch(PDO::FETCH_OBJ)) 
                {
                    $cat = $row->cat;
                }
                $sth->closeCursor();
     
                return $cat;
     
            }
     
        }
     
    $t = new Cat();
    var_dump($t->categorie(2));
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour

    si la méthode catetegorie() renvoie 2 c'est parce que la boucle n'est jamais exécutée. En effet tu boucles sur autre chose qu'un tableau d'objets(un tableau vide vide par exemple) car ta requête sql reçoit toujours 0 comme paramètre.

    Ta requête sql ressemble à ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = 0;

    Pour faite simple, tu peux passer à ta requête le paramètre de la méthode categorie($id):
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //renvoie un tableau d'objet
    public function categorie($id){
        $db = new PDO("mysql:host=localhost;dbname=database", "root", "pass");
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sth = $db->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = :id');
        $sth->bindParam(':id', $id, PDO::PARAM_INT);
        $sth->execute();
        $rowCount = $db->query('SELECT FOUND_ROWS()');
        $rowCount = $rowCount->fetchColumn(); 
        return $sth->fetch(PDO::FETCH_OBJ);
    }
    appel de categorie($id):
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $t = new Cat();
    var_dump($t->categorie(2));

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Je vais étudier votre exemple qui m'intéresse. Avant, j'ai testé avec le __contruct et je suis un peu perdu même en suivant les tutos.

    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
    class Cat{
     
        private $id;
     
        public function __construct($id){
     
            $db = new PDO("mysql:host=localhost;dbname=base", "root", "pass");
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
            $sth = $db->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = :id');
            $sth->bindParam(':id', $this->id, PDO::PARAM_INT);
            $sth->execute();
     
            $rowCount = $db->query('SELECT FOUND_ROWS()');
            $rowCount = $rowCount->fetchColumn(); 
     
            while($row = $sth->fetch(PDO::FETCH_OBJ)) 
            {
                $this->cat = $row->cat;
            }
            $sth->closeCursor();
     
        }
     
        public function show(){
            return $this->id;
        }
     
    }
     
    $t = new Cat(6);
    echo $t->show();
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci, ça va me servir pour me débloquer pour la suite. Pour l'affichage, je dois faire cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $t = new Cat();
    foreach($t->categorie(2) AS $as_t) echo $as_t;
    Je me demande si je peux faire plus court soit en créant une fonction par exemple.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 096
    Points : 4 437
    Points
    4 437
    Par défaut
    le code de @armel18 était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $t = new Cat();
    var_dump($t->categorie(2));
    pourquoi faire un foreach() ? il n'y a qu'un seul resultat

    ------------
    pour ton constructeur
    l'appel deviendrait (si code fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cat=new Cat(2);
    print_r( $cat->cat )
    ;
    $moi= ( !== ) ? : ;

  6. #6
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Je viens de faire le test, que je mettes ou pas private $id, ça change rien du tout. Ça affiche si je l'objet ci-bat.

    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
     
     
    class Cat{
     
        private $id; //franchement ça sert à rien que je mette ou pas en commentaire.
     
        function categorie($cid){
            $db = new PDO("mysql:host=localhost;dbname=base", "root", "pass");
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sth = $db->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = :id');
            $sth->bindParam(':id', $cid, PDO::PARAM_INT);
            $sth->execute();
            $rowCount = $db->query('SELECT FOUND_ROWS()');
            $rowCount = $rowCount->fetchColumn(); 
            $obj = $sth->fetch(PDO::FETCH_OBJ);
            return $obj->id.' - '.$obj->cat; 
        }
     
    }
     
    $c = new Cat();
    echo $c->categorie(2);
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 096
    Points : 4 437
    Points
    4 437
    Par défaut
    cette classe cat, pour l'instant,
    n'a aucune raison d'exister puisqu'elle n'a aucune propriété (Cat->id) et n'a qu'une seule méthode categorie

    elle est donc fonctionnellement une aberration en oops, mais ...
    si c'est juste pour faire un objet pour test alors pas de mal

    si c'est une classe catégorie classique (un modèle ?), elle doit avoir comme propriétés id et titre, pour les méthodes, c'est en fonction des besoins...
    $moi= ( !== ) ? : ;

  8. #8
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    si c'est une classe catégorie classique (un modèle ?), elle doit avoir comme propriétés id et titre, pour les méthodes, c'est en fonction des besoins..
    Je veux en arriver là.

    Pour le moment, c'est pratiquer l'utilisation des classes.

    Je vais faire l'affichage du contenu de la base, manipuler des données, etc.

    Je comprends pas pourquoi mon mon attribut n'est pas utile. J'étais certain de faire une classe qui pourrait servir.

    Il semble que la ligne 11 à $cid, ça serait pas plutôt $this->id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth->bindParam(':id', $cid, PDO::PARAM_INT);
    pour aller chercher le id? j'ai testé, ça ne fonctionne pas si je mets pas
    une affectation à $this->id=$id;.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 096
    Points : 4 437
    Points
    4 437
    Par défaut
    ok reecrite avec un peu + de poo

    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
    class Cat{
     
        public $id;
        public $titre;
     
        private $db;
     
        public function __construct($id=0){
            $this->id =0;
            $this->titre='';
            $this->db = new PDO("mysql:host=localhost;dbname=base", "root", "pass");
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            if ($id>0) $this->categorie($id);
        }    
     
        function fetch($id=0){
            if ($id<1) $id=$this->id;
            $sth = $db->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM categorie WHERE id = :id');
            $sth->bindParam(':id', $id, PDO::PARAM_INT);
            $sth->execute();
            $rowCount = $db->query('SELECT FOUND_ROWS()');
            $rowCount = $rowCount->fetchColumn(); 
            $obj = $sth->fetch(PDO::FETCH_OBJ);
            $this->id= $obj->id; // proprietes changes si pas erreur
            $this->titre=$obj->cat;
            return $this;
        }
     
        function __toString(){
            return $this->titre;
        }
     
        function save(){
            // UPDATE $this->titre WHERE id= $this->id
            return $this;
        }
     
    }
     
    // tests
    $t = new Cat();  echo $t->fetch(2)->titre;
    $t = new Cat(2); echo $t->id .' '. $t->titre;
    $t = new Cat(2); echo $t->id .' '. $t->fetch()->titre; // pas genial faire 2 x la meme requete
    $t = new Cat(2); echo $t->fetch(1)->titre .' '. $t->id;
    echo $t;
    // $t->titre="test"; $t->save();
    pas touché au code, juste revu la structure, pas idéale, mais permet + de faire mumuse.
    $moi= ( !== ) ? : ;

  10. #10
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci papajoker, ça va grandement aider vu que j'apprends beaucoup en faisant "mumuse" avec les codes. Je fais, je défais, et refais, mélangé avec un peu de théories, c'est ma manière d'apprendre. Merci encore. J'apprécie!! Je mets pas résolu tout de suite au cas, où que j'aurais des précisions qui me casse la tête. Merci aussi armel18, pour avoir répondu et me donner des indices.

    Passez une excellente journée
    On oublie souvent la simplicité ou la base dans la vie: Maslow

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

Discussions similaires

  1. [PDO] PDO et class pour la connexion : impossible d'afficher les résultats
    Par neovea dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 25/02/2013, 14h35
  2. PDO Exception levée pour une requête
    Par jlievens dans le forum Doctrine2
    Réponses: 2
    Dernier message: 31/07/2012, 16h14
  3. [PDO] PDO : 'deprecates' fonctions pour connecter au BD
    Par 3logy dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/05/2010, 12h07
  4. [PDO] requête sql avec PDO impossible
    Par HALOMOTO dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2009, 00h17
  5. [PDO] Requête préparée via PDO
    Par immat dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/10/2008, 14h01

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