Я использую PHP PDO с PostgreSQL для нового проекта.
Учитывая следующую функцию, как я могу вернуть идентификатор только что вставленной строки? Теперь он не работает так, как он выглядит.
function adauga_administrator($detalii) { global $db; $ultima_logare = date('Ym-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; }
Из руководства :
Возвращает идентификатор последней вставленной строки или последнее значение из объекта последовательности, в зависимости от базового драйвера. Например, PDO_PGSQL () требует указать имя объекта последовательности для параметра name.
Это должно быть что-то вроде:
return $db->lastInsertId('yourIdColumn');
Из руководства по PHP:
Например, PDO_PGSQL () требует указать имя объекта последовательности для параметра name.
Вы также можете использовать RETURNING в инструкции INSERT и получить результат INSERT, как результат SELECT.
Предыдущие ответы не очень ясны (PDO doc тоже)
В postgreSQL последовательности создаются, когда вы используете тип данных SERIAL
.
CREATE TABLE ingredients ( id SERIAL PRIMARY KEY, name varchar(255) NOT NULL, );
Таким образом, имя последовательности будет ingredients_id_seq
$db->lastInsertId('ingredients_id_seq');