Bonjour tout le monde,
voilà j'ai un petit problème avec mon script et je ne comprend pas pourquoi.
Quelqu'un pourrait m'éclairé s'il vous plaît ?
Mon but est d'ajouter un utilisateur en BDD en utilisant de la POO, mais il me renvoie une erreur de préparation de requête ;
mon code en index contient les objets appelant les classes et connexion en bdd ;Fatal error: Uncaught Error: Call to a member function prepare() on null in fichier\Model.php:72 Stack trace: #0 fichier\index.php(36): Model->add(Object(Controller)) #1 {main} thrown in fichier\Model.php on line 72
et j'ajoute un user avec cette ligne ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $request = new PDO('mysql:host=localhost;dbname=test','root',''); $request->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $control = new Controller($request); $mod = new Model;
Sachant que ma classe Model contient les fonctions retournant l'identifiant et les set mais aussi la fonction add et hydrate ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part $mod->add($control);
et que le fichier de controller contient la construction et set de bdd ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public function add(Controller $user){ $req = $this->_data->prepare('INSERT INTO tests (name, pass) VALUE (:formname, :formpass)'); (ici est la ligne 72) $req->bindValue(':formname', $user->name(), PDO::PARAM_STR); $req->bindValue(':formpass', $user->pass(), PDO::PARAM_STR); $req->hydrate([ 'id' => $this->_data->lastInsertId(), 'name' => $this->_data->name(), 'pass' => $this->_data->pass(), ]); $req->execute(); } public function hydrate(array $data){ foreach($data as $key => $value){ $method = 'set'.ucfirst($key); if(method_exists($this, $method)){ $this->$method($value); } } } public function __construct(array $data = array()){ $this->hydrate($data); }
Voilà je ne sais pas ce que je peux rajouter pour vous aidé à mieux comprendre, mais merci à l'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private $_data; public function __construct($data){ $this->setData($data); } public function setData(PDO $data){ $this->_data=$data; }
Partager