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.
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
Salut,
Attention, dans la fonction login
tu utilises prepare
,
et dans Database.php
, tu nous as montré query
(au lieu de prepare
).