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 :

Passer en attribut d'objet les résultats d'une requête --> Bonne méthode ? [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut Passer en attribut d'objet les résultats d'une requête --> Bonne méthode ?
    Bonjour à tous.

    Je vais essayer de vous exposer clairement mon problème. Je pense que je suis en train de faire une bourde monumentale au niveau de ma méthode d'approche c'est pourquoi je me tourne vers vous.

    J'ai donc une table dans ma base de données qui contient des ustensiles (pour ne pas dire objets et s'embrouiller).

    J'ai une classe PHP dédiée à la gestion de ces ustensiles. J'aimerais pouvoir charger en temps qu'attributs d'une instance de cette classe les champs de cette table (grosso modo j'ai besoin de tous les champs sauf l'id que j'utilise pour retrouver le bon enregistrement).

    J'utilise PDO pour accéder à ma base de donnée. J'ai donc pensé à une méthode "quick & dirty" à savoir une connexion à la base, un fetchAll() sur le champ et ensuite à la mano je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->nom = $result[0]['nom'];
    $this->capacite = $result[0]['capacite'];
    ...
    Seulement je me dis que cette approche n'est pas la bonne. PHP et PDO permettent de retourner les résultats d'une requête sous forme d'objet mais pas de transférer les attributs d'un objet vers un autre.

    Pourriez-vous m'expliquer ou au moins m'orienter vers une méthode plus propre et plus appropriée (soit pour passer en attribut, soit pour gérer mes objets) ? Je suis un peu dans une impasse.

    En vous remerciant.

  2. #2
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    fait un fetch class ou fetch into

  3. #3
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Je viens de me renseigner sur PDO:FETCH_CLASS. Seulement à chaque fois, on parle de remplir les attributs avant de construire l'objet. Or dans mon cas j'aimerais construire l'objet et le remplir qu'à l'appel d'une méthode de cette classe car il est inutile de charger à chaque fois toutes les infos si je ne m'en sert pas. De plus j'ouvre une connexion à la base de donnée dans la classe. Autant s'en servir plutôt que de multiplier les connexions.

    Il y a-t-il une autre façon de se servir de cette argument. J'ai essayé comme ceci mais rien n'est chargé:

    Dans ma classe, $this->connexion refaire comme son nom l'indique au lien avec la BDD initialisé dans le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function loadInfos() {
     
            $sql = 'SELECT * FROM `typeobjets`';
            $sth = $this->connexion->query($sql);
            //On passe en mode de complétion de classe
            $sth->setFetchMode(PDO::FETCH_CLASS, 'objets');
     
        }
    Et je l’instancie ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $unObjet = new objets(1);
    $unObjet->loadInfos();
     
    print_r($unObjet);
    Le paramètre donnant l'id de l'objet à aller chercher dans la BDD.

    Le retour de print_r donne:
    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
    objets Object
    (
        [id] => 1
        [modele] => 
        [template] => 
        [possesseur:objets:private] => 
        [positionX:objets:private] => 
        [positionY:objets:private] => 
        [utilisateurBDD:objets:private] => root
        [motDePasseBDD:objets:private] => XXXXXX
        [dsn:objets:private] => mysql:host=localhost;dbname=xxxxxx
        [connexion:protected] => PDO Object
            (
            )
     
    )
    Les 5 premiers paramètres après l'id étant des attributs définis dans ma classe mais non remplis pour le moment.

  4. #4
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    plutot faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth->setFetchMode(PDO::FETCH_INTO, $this);
    et pas oublié le le fetch

    par contre je vois pas trop ton SELECT puique y'a plusieurs retour la

  5. #5
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Ok, avec ta méthode cela fonctionne comme je le souhaite. Je me retrouve avec:

    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
    objets Object
    (
        [id] => 1
        [modele] => 
        [template] => 
        [possesseur:objets:private] => 
        [positionX:objets:private] => 
        [positionY:objets:private] => 
        [utilisateurBDD:objets:private] => root
        [motDePasseBDD:objets:private] => XXXXXXX
        [dsn:objets:private] => mysql:host=localhost;dbname=xxxxxxxx
        [connexion:protected] => PDO Object
            (
            )
     
        [nom] => Arbalète
        [type] => 1
        [distance] => 2
        [rarete] => 0
        [prixAchat] => 1500
        [prixVente] => 350
        [attaque] => 2
        [defense] => 0
        [degat] => 3
        [resistance] => 1
        [intellect] => 4
        [regeneration] => 0
        [pouvoir] => 0
        [tempsTDJ] => 00:12:00
    )
    Donc du coup c'est nickel, ça fonctionne vraiment comme je voulais. Quant à la requête elle est bidon, la vraie requête était un peu longue pour le forum et ne présentait aucun intérêt pour le problème.

    Encore merci.

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

Discussions similaires

  1. [SQL] PHP objet récupérer les résultats d'une requête
    Par kstou2001 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/01/2008, 23h34
  2. [MySQL] Passer les résultats d'une requête dans un tableau 2D pour un webservice ?
    Par tintin72 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/06/2007, 01h36
  3. Transformer les résultats d'une requête dans un autre ordre
    Par keikun dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/04/2006, 16h29
  4. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46
  5. [JDBC] Stocker les résultats d'une requête
    Par etiennegaloup dans le forum JDBC
    Réponses: 9
    Dernier message: 26/07/2005, 18h18

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