Получить последний идентификатор вставки после подготовленной вставки с PDO
Я использую PHP PDO с PostgreSQL для нового проекта.
Учитывая следующую функцию, как я могу вернуть идентификатор только что вставленной строки? Это не работает так, как выглядит сейчас.
function adauga_administrator($detalii) {
global $db;
$ultima_logare = date('Y-m-d');
$stmt = $db->prepare("INSERT INTO site_admins (sa_nume, sa_prenume, sa_user_name, sa_password, sa_email, sa_id_rol, sa_status, sa_ultima_logare) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bindParam(1, $detalii['nume']);
$stmt->bindParam(2, $detalii['prenume']);
$stmt->bindParam(3, $detalii['username']);
$stmt->bindParam(4, md5(md5($detalii['parola'] . SIGURANTA_PAROLE) . SIGURANTA_PAROLE));
$stmt->bindParam(5, $detalii['email']);
$stmt->bindParam(6, $detalii['rol'], PDO::PARAM_INT);
$stmt->bindParam(7, $detalii['status'], PDO::PARAM_INT);
$stmt->bindParam(8, $ultima_logare);
$stmt->execute();
$id = $db->lastInsertId();
return $id;
}
3 ответа
Из руководства:
Возвращает идентификатор последней вставленной строки или последнего значения из объекта последовательности в зависимости от базового драйвера. Например, PDO_PGSQL() требует, чтобы вы указали имя объекта последовательности для параметра name.
Это должно быть что-то вроде:
return $db->lastInsertId('yourIdColumn');
[РЕДАКТИРОВАТЬ] Обновить ссылку на документ
Из руководства по PHP:
Например, PDO_PGSQL() требует, чтобы вы указали имя объекта последовательности для параметра name.
Вы также можете использовать RETURNING в INSERT-операторе и получить INSERT-результат как результат SELECT.
Предыдущие ответы не очень ясны (документ PDO тоже)
В postgreSQL последовательности создаются, когда вы используете SERIAL
тип данных.
CREATE TABLE ingredients (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
);
Таким образом, имя последовательности будет ingredients_id_seq
$db->lastInsertId('ingredients_id_seq');