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.