Bonjour à tous,
Je vous explique mon petit souci : j'ai une classe DAO que voici :
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
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
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.
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'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.
Partager