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();
}
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.
Il te manques la fonction lastInsertId()
public function lastInsertId() {
return $this->pdo->lastInsertId();
}
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();
}
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()
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);
}
}