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

发布于 2024-10-18 09:55:58 字数 934 浏览 2 评论 0原文

我在一个新项目中使用 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;
}

I'm using PHP PDO with PostgreSQL for a new project.

Given the following function, how can I return the id of the row just inserted?
It doesn't work the way it looks now.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

指尖微凉心微凉 2024-10-25 09:55:58

来自手册

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

它应该类似于:

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

[编辑]更新文档链接

From the Manual:

Returns the ID of the last inserted
row, or the last value from a sequence
object, depending on the underlying
driver. For example, PDO_PGSQL()
requires you to specify the name of a
sequence object for the name
parameter.

It should be something like:

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

[EDIT] Update link to doc

胡大本事 2024-10-25 09:55:58

来自 PHP 手册

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

您还可以在 INSERT 语句中使用 RETURNING 并获取INSERT 结果类似于 SELECT 结果。

From the PHP manual:

For example, PDO_PGSQL() requires you
to specify the name of a sequence
object for the name parameter.

You could also use RETURNING in the INSERT-statement and fetch the INSERT-result like a SELECT result.

肩上的翅膀 2024-10-25 09:55:58

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

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

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

因此序列名称将为 ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');

Previous answers are not very clear (PDO doc too)

In postgreSQL, sequences are created when you are using the SERIAL data type.

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

So the sequence name will be ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文