PDO dans class "Membre"
Résolu
MichaelOfCourse
Messages postés
87
Date d'inscription
Statut
Membre
Dernière intervention
-
MichaelOfCourse Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
MichaelOfCourse Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je viens tout juste de me mettre à la POO, et j'ai commencé par créer une class "membre", dans cette classe j'ai plusieurs methodes, dont une qui est un constructeur.
J'essaye de récuperer les informations de l'user, mais je reçois l'erreur :
Je vous montre le code :
Il me dit donct que le fonction prepare est utilisé sur un "non objet" mais je vois pas en quoi $pdo ne serait pas un objet, surtout qu'il marche très bien dans d'autres pages, sans passer par la prog orientée objet...
J'ai besoin de votre aide pour comprendre mon erreur :(
je viens tout juste de me mettre à la POO, et j'ai commencé par créer une class "membre", dans cette classe j'ai plusieurs methodes, dont une qui est un constructeur.
J'essaye de récuperer les informations de l'user, mais je reçois l'erreur :
Fatal error: Call to a member function prepare() on a non-object in /home/u967210557/public_html/TrapCraftArena/Membre.class.php on line 17
Je vous montre le code :
public function __construct($pseudoMembre)
{
$infosJoueur = $pdo->prepare('SELECT * FROM users WHERE pseudo = :pseudo');
$infosJoueur->execute(array('pseudo' => $pseudoMembre));
$infosJoueur = $infosJoueur->fetch();
// Définir les variables avec les résultats de la base
$this->pseudo = $infosJoueur['pseudo'];
$this->email = $infosJoueur['email'];
}
Il me dit donct que le fonction prepare est utilisé sur un "non objet" mais je vois pas en quoi $pdo ne serait pas un objet, surtout qu'il marche très bien dans d'autres pages, sans passer par la prog orientée objet...
J'ai besoin de votre aide pour comprendre mon erreur :(
A voir également:
- PDO dans class "Membre"
- Membre indisponible vinted - Guide
- Rechercher un membre sur le bon coin - Forum Vos droits sur internet
- Impossible d'ajouter un membre dans un groupe whatsapp - Forum Facebook Messenger
- Message épinglé whatsapp nouveau membre - Accueil - Messagerie instantanée
- Comment ajouter un membre dans un groupe whatsapp - Guide
2 réponses
Salut,
La variable $pdo dans ton constructeur est une variable locale (cf. Portée des variables) : essaye un simple var_dump($pdo) au début de ton constructeur pour t'en convaincre.
Il te faut donc l'initialiser.
Bon développpement
La variable $pdo dans ton constructeur est une variable locale (cf. Portée des variables) : essaye un simple var_dump($pdo) au début de ton constructeur pour t'en convaincre.
Il te faut donc l'initialiser.
Bon développpement
J'étais pas du tout au courant de la portée des variables, mais en effet, c'est bon a savoir :)
Bonne soirée a toi !
Bien sûr que c'est une variable locale, honte à moi ne ne pas l'avoir remarqué :(
Par contre, je ne partage pas ta conclusion. Qu'entends-tu par l'initialiser ? Recréer une instance à chaque appel du constructeur, et probablement aussi dans chaque fonction où cette variable est utilisée ?
Il me semble beaucoup plus simple et rationnel de traiter $pdo comme la variable globale qu'elle est et de mettre un simple global $pdo; dans les fonctions qui l'utilisent. Je sais, on n'aime pas beaucoup ça les variables globales, mais je crois que c'est un cas ou leur emploi est justifié.
global $pdo;
au début de chaque fonction (en particulier ton constructeur) qui utilise cette variable.
Comme ça, c'est toujours la même variable qui est utilisée.
Sans ça, en initialisant la variable, je suppose que tu faisais un new PDO : nouvelle connexion au serveur, nouvelle vérification du nom d'utilisateur et du mot de passe etc... à chaque fois. Beaucoup plus de boulot pour le serveur.
Si c'est pas le cas je comprends pas la logique de php, la variable $pdo est une variable locale, MAIS en disant a une fonction qu'elle peut l'utiliser, elle peut l'utiliser ? O.o
Ou alors j'ai pas tout compris ;)