PHP POO BDD error call function prepare()
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 ;
Citation:
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
mon code en index contient les objets appelant les classes et connexion en bdd ;
Code:
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; |
et j'ajoute un user avec cette ligne ;
Code:
$mod->add($control);
Sachant que ma classe Model contient les fonctions retournant l'identifiant et les set mais aussi la fonction add et hydrate ;
Code:
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);
} |
et que le fichier de controller contient la construction et set de bdd ;
Code:
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;
} |
Voilà je ne sais pas ce que je peux rajouter pour vous aidé à mieux comprendre, mais merci à l'avance pour votre aide.