IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Call to undefined method DB::prepare() [PDO]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...
    Dernière modification par Invité ; 26/11/2012 à 22h41. Motif: résolu

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $test = $DB->getBdd()->prepare('ta requête');
    $DB correspond à l'objet que tu as instancié au préalable.
    une réponse vous a permis d'avancer ?

  3. #3
    Invité
    Invité(e)
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [sfGuard] Call to undefined method myUser::setReferer
    Par jylac dans le forum Plugins
    Réponses: 3
    Dernier message: 11/06/2010, 00h13
  2. [1.x] Call to undefined method CommandeForm::save()
    Par sacricri dans le forum Symfony
    Réponses: 5
    Dernier message: 09/01/2010, 16h24
  3. [PDO] Call to undefined method PDOStatement::lastinsertid()
    Par megacool dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/10/2008, 15h32
  4. [Artichow] Call to undefined method Graph::getDrawer()
    Par belocom dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/04/2008, 22h56
  5. Réponses: 0
    Dernier message: 25/02/2008, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo