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

时间:2011-02-20 15:28:38

标签: php postgresql pdo prepared-statement

我正在将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;
}

3 个答案:

答案 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');