+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Futur Membre du Club
    Inscrit en
    novembre 2012
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 38
    Points : 17
    Points
    17

    Par défaut Call to undefined method DB::prepare()

    Salut tout le monde,

    Je suis en train de faire un site avec des utilisateurs qui peuvent s'inscrire.
    J'utilise PDO et ma connexion est dans une classe DB.

    Voici les codes :

    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
    25
    26
    27
    28
    29
    30
    <?php     
    class DB{     
    private $host = 'localhost';         
    private $username = 'root';         
    private $password = '';    
    private $database = 'projet';
    private $bdd;             
     
    public function __construct($host = null, $username = null, $password = null, $database = null){             
    if($host != null){                 
    $this->host = $host;                 
    $this->username = $username;                 
    $this->password = $password;                 
    $this->database = $database;             
    }               
     
    try{                 
    $this->bdd = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));  
    }
     
    catch(PDOException $e){ die('impossible de se co à la bd'); }         
     
    }          
     
    public function query($sql, $data = array()){            
    $req =$this->bdd->prepare($sql);             
    $req->execute($data);             
    return $req->fetchAll(PDO::FETCH_OBJ);        
    }}
    Pardon pour cette indentation, j'ai pas réussi à en faire une.
    Et mon code pour un INSERT TO :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $test = $DB->prepare('INSERT INTO personne(NomPersonne, PrenomPersonne, TelPersonne, MDPPersonne, EmailPersonne, AdresseClient, VilleClient)  VALUES(:NomPersonne, :PrenomPersonne, :TelPersonne, :MDPPersonne, :EmailPersonne, :AdresseClient, :VilleClient)');
        $success = $test->execute(array(
            'NomPersonne'=> $var_nom,
            'PrenomPersonne'=>$var_prenom,
            'TelPersonne'=>$var_tel,
            'MDPPersonne'=>$var_mdp,
            'EmailPersonne'=>$var_email,
            'AdresseClient'=>$var_adresse,
            'VilleClient'=>$var_ville
     
            ));
    J'ai comme erreur :

    Fatal error: Call to undefined method DB::prepare() in C:\Program Files (x86)\EasyPHP-12.1\www\pizzaalex\formulaireinscription.inc.php on line 113

    Cette ligne correspond au code du INSERT INTO.

    Merci de votre aide, je désespère...

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 769
    Points : 1 379
    Points
    1 379

    Par défaut

    Bonsoir,

    ou instancie tu ton objet $DB?

    De plus tu fait $BD->prepare() alors que dans ta class DB tu ne déclare pas cette méthode et tu ne fait pas d'héritage de la classe PDO donc tu ne récupère pas les méthodes de le class PDO.

    Pour que cela fonctionne,

    Dans ta class DB tu as un attribut bdd qui est un objet PDO donc pour accéder aux méthodes PDO tu doit passer par cet attribut, pour ce faire étant donné qu'il est déclaré en private dans ta classe tu doit passer par un accesseur,

    c'est une méthode qui te retourne un objet privé de ta classe,
    exemple pour ta classe avec un accesseur pour récupérer l'objet bdd de la classe DB:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    class DB{
    //Le code de la classe que tu a déjà codé,
     
    public function getBdd(){
        return $this->bdd;
    }
     
    }
    ensuite après avoir instancié un objet de type DB pour pourvoir faire des requêtes SQL tu doit passer par cet accesseur:
    Code :
    $test = $DB->getBdd()->prepare('ta requête');
    $DB correspond à l'objet que tu as instancié au préalable.

  3. #3
    Futur Membre du Club
    Inscrit en
    novembre 2012
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 38
    Points : 17
    Points
    17

    Par défaut

    Merci beaucoup Exia, c'est très gentil de ta part, ça marche maintenant !
    J'avais peur d'être le seul ayant ce problème... j'avais trouvé beaucoup d'info sur les INSERT TO mais pas quand la connexion est codée en objet...

    Pour $DB, j'ai mis dans mon header (que je "include" pour chaque page de mon site) les lignes :

    Code :
    1
    2
    require 'db.class.php';
    $DB = new DB();
    En tout cas je te remercie mille fois
    (et merci pour les explications très claires)

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •