Bonjour,
Voila j'ai commencé la formation à la POO de Grafikart et suis arrivé au TP : Refactoring, tout ce passe alors bien, j'ai les mêmes erreur affiché en vidéo, mais c'est alors qu'a 18:50, est affiché un article, tandis que moi j'obtiens une erreur fatale de ma base de donné.
Voici une image pour illustrer mes propos
il me dit que l'erreur viens de MysqlDatabase alors, voici le code :
<?php
namespace Core\Database;
use \PDO;
class MysqlDatabase extends Database{
private $db_name;
private $db_user;
private $db_pass;
private $db_host;
private $pdo;
public function __construct($db_name, $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
$this->$db_name = $db_name;
$this->$db_user = $db_user;
$this->$db_pass = $db_pass;
$this->$db_host = $db_host;
}
private function getPDO(){
if($this->pdo === null){
$pdo = new PDO('mysql:dbname=blog;host=localhost', 'root', 'root');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
}
return $this->pdo;
}
public function query($statement, $class_name = null, $one = false){
$req = $this->getPDO()->query($statement);
if($class_name === null){
$req->setFetchMode(PDO::FETCH_OBJ);
}else{
$req->setFetchMode(PDO::FETCH_CLASS, $class_name);
}
if($one){
$datas = $req->fetch();
}else {
$datas = $req->fetchAll();
}
return $datas;
}
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;
}
}
Je sais pas du tout où est le problème,Merci d'avance.
Bonsoir.
Commences par regarder si ton problème ne serait pas le même que celui qui a déja été résolu, soit : [Formation POO] Refactoring.
Vous avez exactement le même message d'erreur.
Toi :
Fatal error: in C:\wamp\www\blog\core\Database\MysqlDatabase.php on line 31
PDOException: in C:\wamp\www\blog\core\Database\MysqlDatabase.php on line 31
Lui :
Fatal error: in D:\wamp\www\grafikart\core\Database\MysqlDatabase.php on line 31
PDOException: in D:\wamp\www\grafikart\core\Database\MysqlDatabase.php on line 31
Donc vérifies par rapport à ce qui lui a permit de résoudre son problème.
Bonjour Fabien,
Tu as une erreur dans ton constructeur. tu as tapé:
public function __construct($db_name, $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
$this->$db_name = $db_name;
$this->$db_user = $db_user;
$this->$db_pass = $db_pass;
$this->$db_host = $db_host;
}
alors que ce devrait être:
public function __construct($db_name, $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_host = $db_host;
}
Au niveau des $this->xxx tu as mis $ devant la propriété alors qu'il n'en faut pas.
De plus je mofifierais la function getPDO comme ceci:
$pdo = new PDO("mysql:dbname={$this->db_name};host={$this->db_host};charset=utf8", $this->db_user, $this->db_pass);
J'espère avoir été utile
Bonne continuation
Alain
Merci beaucoup de vos réponse, en effet Lartak, j'avais bel et bien la même erreur et avais déjà été résolu auparavant (j'avais pourtant cherché :/ au mauvais endroit apparement ^^'), en effet, mauvais recopiage ou une faute quelque part, en effet aussi j'avais mis des "$" ^^' je n'avais même pas fait attention, merci Alain de me l'avoir montré ^^, je n'avais nullement besoin de modifier la fonction getPDO, c'était la fonction last qui posais problème.
Je vous remercie énormément de votre aide.