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


Shady Ladow
Auteur
Réponse acceptée

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).