Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 : 133
    Points : 404
    Points
    404

    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 :
    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 :
    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
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 963
    Points : 3 910
    Points
    3 910

    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 éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 : 133
    Points : 404
    Points
    404

    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.

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
  •