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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    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));

  2. #2
    Membre Expert
    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
    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 éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    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();

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    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.

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    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 323
    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 )
    ;

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    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);

+ 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