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

Posted

技术标签:

【中文标题】使用 PDO 准备好插入后获取最后一个插入 ID【英文标题】:Get last insert id after a prepared insert with PDO 【发布时间】:2011-06-30 18:52:53 【问题描述】:

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

【问题讨论】:

也像 - return $db->lastInsertId($stmt); 一样调用 【参考方案1】:

来自Manual:

返回最后插入的 ID 行,或序列中的最后一个值 对象,取决于底层 司机。例如,PDO_PGSQL() 要求您指定一个名称 名称的序列对象 参数。

应该是这样的:

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

[编辑] 更新文档链接

【讨论】:

我尝试使用序列名称作为 lastInsertId() 的参数并且它有效。谢谢。 序列名称是什么?包含自动递增值的列的名称? @sh1ftst0rm 序列用于 Postgres 而不是 mysql。 MySQL 通常会在没有传递参数的情况下返回(假设你有一个主键)。 \d tablename 给我看了id | integer | not null default nextval('addr_source_id_seq'::regclass),我输入了addr_source_id_seq,瞧!所以就我而言,它不是table_column_seq 行。【参考方案2】:

来自 PHP manual:

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

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

【讨论】:

【参考方案3】:

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

在 postgreSQL 中,当您使用 SERIAL 数据类型时会创建序列。

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

所以序列名称将是ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');

【讨论】:

以上是关于使用 PDO 准备好插入后获取最后一个插入 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?

如何获取最后插入的ID,以及PDO列的名称?

php PDO - 如何获取最后插入的ID?

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID

如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

PDO将最后一个插入ID插入两个表