Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2011, 16h33   #1
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
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 :
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.
__________________
Quelques conseils:

Utilisez <?php plutôt que <?
Utilisez des ' et la concaténation plutôt que "
Pensez à revenir à la ligne après chaque ; pour plus de clarté.
// Commentez votre code un maximum
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 17h06   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
fait un fetch class ou fetch into
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 21h47   #3
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
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 :
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 :
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 :
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.
__________________
Quelques conseils:

Utilisez <?php plutôt que <?
Utilisez des ' et la concaténation plutôt que "
Pensez à revenir à la ligne après chaque ; pour plus de clarté.
// Commentez votre code un maximum
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2011, 04h02   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
plutot faire :
Code :
$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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2011, 23h50   #5
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Ok, avec ta méthode cela fonctionne comme je le souhaite. Je me retrouve avec:

Code :
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.
__________________
Quelques conseils:

Utilisez <?php plutôt que <?
Utilisez des ' et la concaténation plutôt que "
Pensez à revenir à la ligne après chaque ; pour plus de clarté.
// Commentez votre code un maximum
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h30.


 
 
 
 
Partenaires

Hébergement Web