Bonjour,
Voila je rencontre un petit problème avec mon code.
En gros, le code est le même que celui de la création des table dans le tutoriel pour apprendre la POO en PHP, le voici :
public static function find($id)
{
return App::getDb()->prepare('SELECT * FROM ' . static::getTable() . 'WHERE id = ?', [$id], get_called_class(), true);
}
J'ai uniquement mis la fonction affectée.
Voici le code qui appelle cette fonction :
$categorie = \App\Table\Categorie::find($_GET['id']);
Voici finalement le code de la fonction prepare :
public function prepare($statement, $attributes, $class_name, $one = false )
{
$req = $this->getPDO()->prepare($statement);
$req->execute($attributes);
$req->setFetchMode(PDO::FETCH_CLASS, $class_name);
if($one)
{
$datas = $req->fetch();
}
else
{
$datas = $req->fetchAll();
}
return $datas;
}
J'aimerais trouver un moyen de ne plus recevoir ces erreurs :
Imgur
Avez-vous une idée de ce qui faudrait que je fasse pour régler ce malheureux problème ?
Merci d'avance à tous et à toutes qui m'aideront !
Salut,
1)
l'erreur nous dit de regarder à la ligne 43.
1.1) Quelle est la ligne 43 ?
Il me semble que c'est celle-là :
$req->execute($attributes);
Mais je voudrai en être sûr.
En même temps,
places un try/catch à cette ligne 43,
1.2) et donne nous le message d'erreur qui s'affiche.
try
{
// ligne 43
}
catch (\PDOException $e)
{
$e->getMessage(); // qu'est-ce qui s'affiche ici ?
}
2)
Je ne sais pas vraiment si ça va changer quelque chose mais,
j'aurai mis un espace avant le WHERE dans la requête SQL :
'SELECT * FROM ' . static::getTable() . ' WHERE id = ?'
3)
4)
Tu as mis le "$req->setFetchMode" APRES le "$req->execute".
Je ne me souviens plus du tout s'il FAUT le mettre AVANT,
ou si ça n'a aucune importance (qu'on peut le mettre avant ou après c'est pareil).
Si toi ou quelqu'un, peut répondre à ça ^^
Salut !
J'ai fais la première et la deuxième technique et tout est rentré dans l'ordre.
Bizarrement, ça marchait (pour la première technique) quand je mettre le try/catch et arrêtait de fonctionner.
Bref, je crois que c'est la solution 2 qui a fonctionnée !
Merci d'avoir pris le temps de me répondre ! :)