Bonjour,

Je viens vous faire part d'un E incompréhension concernant le fonctionnement d'un script.

Je précise au passage qu'il s'agit du code utilisé par grafikart dans le tuto "refactorisation espace membre" à 18:26 de la vidéo

Ce que Grafikart fait

$user = $db->query('SELECT id FROM users WHERE username = ?', [$_POST['username']])->fetch();

Ce que j'obtiens

"Fatal error: Call to undefined method PDO::fetch()"

Ce que je comprends

pour ma part, je trouve ce message d'erreur tout à fait compréhensible.

$user est un objet PDO, hors fetch n'est pas une methode de PDO, mais une méthode de PDOStatement, c'est à dire qu'elle s''applique au résultat d'une requête ($statement).

le bon code devrait être :

$req = $db->query('SELECT id FROM users WHERE username = ?', [$_POST['username']]);
$user = $req->fetch();

Ma variable $req est un objet PDOStatement et je ne peux faire mon fetch() que sur cette variable.

Qu'en pensez-vous ?

Ai-je mal compris quelque chose ?

Merci pour vos réponses, j'espère qu'elles éclairciront mes lanternes.

Sylvain alias sf100672

8 réponses


tleb
Réponse acceptée

Salut,

$foo->bar->baz;
# tu n'appelles pas bar sur $foo puis baz sur $foo
# tu appelles baz sur l'objet contenu dans bar qui est lui même contenu dans $foo
# que tu stockes le résultat de $foo->bar ou pas dans une variable, ça ne change rien
Carouge10
Réponse acceptée

Attention la déclaration des tableaux par [] se fait à partir de la version 5.4 de php, cela pourrait être la cause de votre problème

sf100672
Auteur

Ok, je comprends Le raisonnement, mais je n'explique pas pourquoi le code de grafikart me renvoie une erreur.

Mon code fonctionne uniquement lorsque j'applique mon fetch à une variable contenant la requête SQL.

Cela pourrait -il provenir d'une version de php qui serait trop ancienne ? ( pour info php 5.3 )

merci pour ton aide !

Essaye en entourant la première partie du code avec des parentèses.

Dites moi si je me trompe mais la méthode query ne permet pas de passer des paramètres
dans ce cas la méthode renvoie false et donc impossible de faire le fetch dans la foulée

sf100672
Auteur

Bonjour buggy,

il ne s'agit pas de la méthode "query" de PDOStatement.

C'Est une méthode que j'ai créé moi-même et que j'ai nommé ainsi.

Sylvain

Ok désolé
d'un autre côté, tu voulais qu'on devine ce que ta fonction retourne ?

sf100672
Auteur

resalut Huggy,
Il est vrai que mon post n'est pas très clair.

toutefois il est résolu. Le problème venait de ma version de PHP (5.3) qui est vieillotte.

merci à toi pour ton aide

Sylvain