我正在将PHP PDO和PostgreSQL用于一个新项目。
给定以下函数,如何返回刚插入的行的id? 它现在的样子不起作用。
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;
}
答案 0 :(得分:59)
来自Manual:
返回上次插入的ID 行,或序列中的最后一个值 对象,取决于底层 驱动程序。例如,PDO_PGSQL() 要求您指定a的名称 名称的序列对象 参数。
应该是这样的:
return $db->lastInsertId('yourIdColumn');
[编辑]更新doc的链接
答案 1 :(得分:11)
来自PHP manual:
例如,PDO_PGSQL()需要您 指定序列的名称 name参数的对象。
您还可以在INSERT语句中使用RETURNING,并像SELECT结果一样获取INSERT结果。
答案 2 :(得分:4)
以前的答案不是很清楚(PDO doc也是如此)
在postgreSQL中,当您使用SERIAL
数据类型时会创建序列。
CREATE TABLE ingredients (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
);
因此序列名称为ingredients_id_seq
$db->lastInsertId('ingredients_id_seq');