TP POO Back-end problème fonction login()

Par Shady Ladow, il y a 9 ans


Bonjour,

Voila je rencontre un petit problème avec mon code. Dans la fonction login, j'ai une erreur lorsque je fais tout comme Grafikart.

public function login($username, $password){ $user = $this->db->prepare('SELECT * FROM user WHERE pseudo = ?', [$username], null,true); if($user) { return $user->password === sha1($password); } return false; }

et j'obtiens cette erreur

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: fetch mode requires the classname argument' in C:\wamp\www\site_aikido\core\Database.php on line 69 ( ! ) PDOException: SQLSTATE[HY000]: General error: fetch mode requires the classname argument in C:\wamp\www\site_aikido\core\Database.php on line 69 Call Stack # Time Memory Function Location 1 0.0006 253576 {main}( ) ..\index.php:0 2 0.0035 299976 require( 'C:\wamp\www\site_aikido\pages\users\login.php' ) ..\index.php:32 3 0.0050 337552 Core\Auth\DbAuth->login( ) ..\login.php:10 4 0.0050 338208 Core\Database->prepare( ) ..\DbAuth.php:21 5 0.0066 351168 setFetchMode ( )

Donc j'en déduis que setFetchMode() nécessite un nom de classe.
Voilà le code de Database.php

public function query($statement, $class_name = null, $one=false){ $req = $this->GetPDO()->query($statement); if($class_name === null) { $req->setFetchMode(PDO::FETCH_CLASS); } else{ $req->setFetchMode(PDO::FETCH_CLASS, $class_name); } if($one){ $datas = $req->fetch(); } else{ $datas = $req->fetchAll(); } return $datas; }

Alors j'ai remplacé null par '' et ça marchait parfaitement ! Jusqu'à ce que je me connecte avec un pseudo et un mot de passe enregistré dans la base de données.

Notice: Trying to get property of non-object in C:\wamp\www\site_aikido\core\Auth\DbAuth.php on line 24 Call Stack # Time Memory Function Location 1 0.0003 253568 {main}( ) ..\index.php:0 2 0.0018 299984 require( 'C:\wamp\www\site_aikido\pages\users\login.php' ) ..\index.php:32 3 0.0029 337304 Core\Auth\DbAuth->login( )

Donc j'ai fais un var_dump de $user et c'est un tableau ! Donc quand je fais '' pour le $class_name, j'ai un fetchAll(). Donc pour régler le problème générale, c'est avec mon setFetchMode qui veut une classe, mais je sais pas quoi mettre.

Merci d'avance.

2 réponses

SLK, il y a 9 ans

Salut,

Attention, dans la fonction login tu utilises prepare,
et dans Database.php, tu nous as montré query (au lieu de prepare).

Shady Ladow, il y a 9 ans

Désolé :s mais en cherchant hier j'ai tout résolu, enfin j'ai encore un problème mais il est pas très dérangeant pour l'instant ^^ la solution c'était FETCH_OBJ au lieu de FETCH_CLASS :3