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


tpin
Réponse acceptée

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();
}
Nicolas Groelly
Réponse acceptée

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.

Bonsoir,

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

hdfs99
Auteur

nn je pense pas mika445 il y a aucun difference

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" ?

hdfs99
Auteur
<?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

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
Auteur

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;
}

}
?>

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

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
Auteur

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