gpt4 book ai didi

php - Postgres/PHP - 检索插入行 ID 的标准方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 00:27:48 26 4
gpt4 key购买 nike

我在 Google 上搜索并阅读了几篇关于不同人如何解决这个问题的文章,但我想知道解决这个问题的标准方法是什么以及,哪一个最适合我的情况。

我有一个创建新问题的 AJAX 页面,我需要知道如何从下一行同一 php 文件中的插入查询中检索 ID。

看起来像这样:

$r = pg_query("INSERT INTO questions (audit_id, type_id, order) VALUES (1,1,1)");
// Fetch ID from $r here...

我看过 MySQL 的 mysql_insert_id() 函数,听说 pg_last_oid() 与 PostgreSQL 类似,但是 documentation声称它已被弃用并将很快被删除。我还看到了 CURRVAL('my_sequence_table.id') 的使用,但我不确定这是否适用于 AJAX,因为这可能会引发竞争条件。

有人可以告诉我标准 PHP/PostgreSQL 方法来解决这个问题吗?如果有任何意见,我将不胜感激。

附言我想念 Ruby on Rails!

最佳答案

可能您最好的选择是使用 INSERT INTO questions ... VALUES (1,1,1) RETURNING audit_id,因为无论您是手动插入值还是通过插入值,它都会为您提供正确的值一个序列。

请注意,如果您获得相同的 session ,currval() 技巧肯定会起作用——currval() 保证返回与序列传递给的值相同的值你的 session ,不管其他并发 session 在做什么。如果您有一个连接池,它以某种方式为第一个查询使用与第二个查询不同的连接,它只会导致问题,但如果这样做的话,它会完全破坏一个池。我知道没有 pooler 以这种方式做事。

更新:请参阅 pg_get_serial_sequence() 函数,它采用表名和列名并返回关联的序列名。它比在代码中硬编码序列名称更实用。

关于php - Postgres/PHP - 检索插入行 ID 的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com