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 :

Fatal error: Call to a member function prepare() on a non-object [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 419
    Points
    419
    Par défaut Fatal error: Call to a member function prepare() on a non-object
    Bonjour à tous,

    Je vous explique mon petit souci : j'ai une classe DAO que voici :

    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
     
    class UserDaoImpl implements UserDao {
     
    	private $pdo;
     
    	public function __contruct(PDO $pdo) {
    		$this->pdo = $pdo;
    	}
     
    	public function create(User $user) {	
    		$sql = "INSERT INTO user
    					(login, password, email, firstname, lastname) 
    				VALUES
    					(:login, :password, :email, :firstname, :lastname)";
     
    		$stmt = $this->pdo->prepare($sql);
    		$stmt->bindParam(':login', $user->getLogin(), PDO::PARAM_STR);
    		$stmt->bindParam(':password', $user->getPassword(), PDO::PARAM_STR);
    		$stmt->bindParam(':email', $user->getEmail(), PDO::PARAM_STR);
    		$stmt->bindParam(':firstname', $user->getFirstname(), PDO::PARAM_STR);
    		$stmt->bindParam(':lastname', $user->getLastname(), PDO::PARAM_STR);
    		$stmt->execute();
    		$user->setId($this->pdo->lastInsertId());
    		return $user;		
    	}
     
    // autres méthodes CRUD
    Quand je veux utiliser ma classe DAO comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try {
    	$pdo = new PDO('mysql:dbname=database;host=localhost', 'dbuser', 'dbpass');
    	$pdo->setAttribute(PDO::ATTR_PERSISTENT, true);
    	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
    	Logger::error($e->getMessage());
    }
     
    $dao = new UserDaoImpl($pdo);
    $user = new User("johndoe23", "secret", "john.doe@crappymail.com", "John", "Doe");
    $dao->create($user);
    J'obtiens une "Fatal error: Call to a member function prepare() on a non-object". Or j'ai bien l'impression que je passe une instance de PDO au constructeur de ma classe DAO.

    J'ai essayé avec et sans le try/catch, j'ai essayé en instanciant directement PDO dans le constructeur de ma classe, j'ai essayé avec un singleton, j'ai relu la doc PHP et je ne vois vraiment pas pourquoi il me sort cette erreur à chaque fois.

    Si quelqu'un à une piste je suis preneur.

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Dans ton code je vois ceci :
    public function __contruct(PDO $pdo)
    __contruct au lieu de __construct, petite erreur de frappe (manque le s).

    Qui fait que l'Objet DAO n'aurait finalement pas de constructeur, du coup pas un Objet PDO.


    Mise à pas ça je ne vois autre chose.


    Fait un peu de débogage, comme un print_r() de $pdo aussi bien après instanciation que dans l'objet DAO.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 419
    Points
    419
    Par défaut
    Merci RunCodePhp

    Effectivement je n'avais plus les yeux en face des trous à force de chercher autour...

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

Discussions similaires

  1. [PDO] erreur : Fatal error: Call to a member function prepare() on a non-object
    Par destigul dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/04/2015, 14h25
  2. Réponses: 4
    Dernier message: 07/10/2009, 11h53
  3. Réponses: 4
    Dernier message: 02/10/2009, 10h12
  4. [PDO] Fatal error: Call to a member function setFetchMode() on a non-object in
    Par tores20 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/07/2009, 23h04
  5. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20

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