undefined lastInsertId

Par Motel, il y a 9 ans


Bonjour,

J'ai un petit probléme avec mon code quand jutilise $topic_id = $this->db->lastInsertId(); sela me donne cette erreur la faireFatal error: Call to undefined method Database::lastInsertId()

class auth { private $db; public function __construct($db) { $this->db = $db; } public function register($username, $email, $password) { $password = password_hash($password, PASSWORD_BCRYPT); $this->db->query('INSERT INTO users SET username = ?, email = ?, password = ?, date_time = NOW()', [$username, $email, $password]); $id = $this->db->lastInsertId(); }

6 réponses

skank, il y a 9 ans

je crois que tu a une erreur dans ta query ya pas le password = ?

public function register($username, $email, $password) { $password = password_hash($password, PASSWORD_BCRYPT); $this->db->query('INSERT INTO topic SET name = ?, messages = ?, password = ?, date_time = NOW()', [$username, $email, $password,]); $id = $this->db->lastInsertId(); }
Motel, il y a 9 ans

Salut skank,

voici le bon code le précédent n'était pas bon et dans le query() il y à bien le password = ?

public function register($username, $email, $password) { $password = password_hash($password, PASSWORD_BCRYPT); $this->db->query('INSERT INTO users SET username = ?, email = ?, password = ?, date_time = NOW()', [$username, $email, $password]); $id = $this->db->lastInsertId(); }

mais j'ai toujours le code d'erreurFatal error: Call to undefined method Database::lastInsertId()

SLK, il y a 9 ans

Salut,

normalement, lastInsertId() est une méthode de PDO :
PDO::lastInsertId()
or dans ton message d'erreur, on voit :
Database::lastInsertId()
Donc $this->db à été initialisé depuis ta classe Database, au lieu de la classe d'origine PDO.
Et apparemment (vu le message d'erreur) ta classe Database n'a pas de fonction lastInsertId()

C'est un peu étrange de voir un attribut "pdo" dans une classe "Auth".
Tu devrais mettre cet attribut dans ta classe "Database".
Et dans cette classe "Database", tu met une fonction getPDO(), dans ce genre :

// classe Database ... private $pdo; ... public function getPDO() { if ($this->pdo === NULL) { // modifie la ligne ci-dessous pour correspondre à ton code $pdo = new PDO($this->db_type . ':dbname=' . $this->db_name . ';host=' . $this->db_host, $this->db_user, $this->db_pass); $pdo->exec("SET CHARACTER SET utf8"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pdo = $pdo; } return $this->pdo; }

Et tu t'en sert quand tu as besoin d'envoyer ton $pdo à une autre fonction.

Motel, il y a 9 ans

Salut,

Voilà le code de la class Database

class Database { private $pdo; public function __construct($type, $login, $password, $database, $host) { $this->pdo = new PDO("$type:dbname=$database;host=$host;charset=utf8", $login, $password); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } }
kwik, il y a 9 ans

Il te manques la fonction lastInsertId()

public function lastInsertId() { return $this->pdo->lastInsertId(); }
Motel, il y a 9 ans

Merci beaucoup, j'ai réussi à régler mon probléme :)