使用PDO准备插入后获取最后一个插入ID

我正在使用PostgreSQL的PHP​​ PDO为一个新的项目。

鉴于以下function,我怎样才能返回刚刚插入的行的ID? 它现在看起来不行。

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; } 

从手册 :

返回最后插入的行的ID,或从序列对象的最后一个值,具体取决于基础驱动程序。 例如,PDO_PGSQL()要求您为name参数指定序列对象的名称。

它应该是这样的:

 return $db->lastInsertId('yourIdColumn'); 

从PHP 手册 :

例如,PDO_PGSQL()要求您为name参数指定序列对象的名称。

您也可以在INSERT语句中使用RETURNING ,并像SELECT结果一样获取INSERT结果。

以前的答案不是很清楚(PDO文档)

在PostgreSQL里,当你使用SERIAL数据types的时候创build序列。

 CREATE TABLE ingredients ( id SERIAL PRIMARY KEY, name varchar(255) NOT NULL, ); 

所以序列名称将是ingredients_id_seq

 $db->lastInsertId('ingredients_id_seq');