Call to a member function prepare() on a non-object

Par hdfs99, il y a 8 ans


Bonsoir tt le monde

J'ai un probleme avec mon code j'ai une table grade qui a 2 column id et nom id et auto_increment
voila mon code

public function create(grade $grade){ $this->st=$this->pdo->prepare('insert into grade(id,nom)values(null,:nom)'); $this->st->bindvalue(':nom',$grade->getnom(),pdo::PARAM_STR); $exe=$this->st->execute(); }

Je voudrais ajouter des donnee dans ma table.
Mais le probleme c que il me donne cette erreur Call to a member function prepare() on a non-object in C:\wamp\www\Application\grade\manager.php on line 11 je comprend pas pourquoi
eEt merci

11 réponses

Carouge10, il y a 8 ans

Bonsoir,
Puisque id est en "auto-increment", il n'est pas nécessaire de le renseigner dans la requête car la tu le force à null.

D'après ton erreur, tu n'as pas de fonction prepare donc pas de pdo.
Comment renseignes-tu "$this->pdo" ?

keulu, il y a 8 ans

L'erreur est assez clair. il ne trouve pas prepare() dans l'objet (l'objet pdo en l'occurence). donc faut regarder ce que vaut ton pdo et bien l'instancier.

tu as bien l'extension pdo d'installé pour ton PHP ?

hdfs99, il y a 8 ans
<?php include 'class.php'; class manager{ private $pdo; private $st; public function makes(){ $this->pdo=new pdo('mysql:host=localhost;dbname=gestion','root',''); } public function create(grade $grade){ $this->st=$this->pdo->prepare('insert into grade(id,nom)values(null,:nom)'); $this->st->bindvalue(':nom',$grade->getnom(),pdo::PARAM_STR); $exe=$this->st->execute(); } } ?>

Voila ma classe manager qui gere la classe grade

Carouge10, il y a 8 ans

es-tu sur que "$this->pdo" est renseigné et pas vide.
que donnes un ceci juste avant de faire le prepare :

var_dump($this->pdo);
hdfs99, il y a 8 ans

j'ai tester meme resultat.
voila ma class grade

<?php class grade{ private $id; private $nom; public function getid(){ return $this->id; }public function setnom($nom){ $this->nom=$nom; return $this; } public function getnom(){ return $this->nom; } } ?>
Carouge10, il y a 8 ans

Qu'est ce qui a été testé ?
que te retourne le var_dump ?

tpin, il y a 8 ans

Est ce que tu appelles ta méthode makes() pour initier la connexion sql ?
Si ce n'est pas le cas il est normal que $this->pdo ne soit pas une instance de PDO et que tu ne puisses pas utiliser prepare().

public function create(grade $grade){ $this->makes(); $this->st=$this->pdo->prepare('insert into grade(id,nom)values(null,:nom)'); $this->st->bindvalue(':nom',$grade->getnom(),pdo::PARAM_STR); $exe=$this->st->execute(); }
Laznet, il y a 8 ans

Bonsoir,

Je ne sais pas si ça va régler ton problème, mais par conventions on met "INSERT" en majuscule.

hdfs99, il y a 8 ans

nn je pense pas mika445 il y a aucun difference

Nicolas Groelly, il y a 8 ans

Change ta fonction make en __construct

function __construct() { $this->pdo=new pdo('mysql:host=localhost;dbname=gestion','root',''); }

La fonction est automatiquement appeler à chaque fois que tu instancis la classe.

hdfs99, il y a 8 ans

Merci les amis la soultion est d'appeller la fonction makes comme il a fait tpin