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
$user = $db->query('SELECT id FROM users WHERE username = ?', [$_POST['username']])->fetch();
"Fatal error: Call to undefined method PDO::fetch()"
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
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
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
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 !
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
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
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