gpt4 book ai didi

php - mysql_insert_id 替代 postgresql

转载 作者:IT王子 更新时间:2023-10-28 23:49:21 26 4
gpt4 key购买 nike

是否有用于 PostgreSQL 的 mysql_insert_id() php 函数的替代方案?大多数框架通过查找 ID 中使用的序列的当前值来部分解决问题。但是,有时主键不是串行列....

最佳答案

从 PostgreSQL 的角度来看,在伪代码中:

 * $insert_id = INSERT...RETURNING foo_id;-- only works for PostgreSQL >= 8.2. 

* INSERT...; $insert_id = SELECT lastval(); -- works for PostgreSQL >= 8.1

* $insert_id = SELECT nextval('foo_seq'); INSERT INTO table (foo...) values ($insert_id...) for older PostgreSQL (and newer PostgreSQL)

pg_last_oid() 仅在您拥有 OID 的情况下有效。自 PostgreSQL 8.1 以来,OID 默认关闭。

因此,根据您拥有的 PostgreSQL 版本,您应该选择上述方法之一。当然,理想情况下,使用抽象出上述内容的数据库抽象库。否则,在低级代码中,它看起来像:

方法一:插入...返回

// yes, we're not using pg_insert()
$result = pg_query($db, "INSERT INTO foo (bar) VALUES (123) RETURNING foo_id");
$insert_row = pg_fetch_row($result);
$insert_id = $insert_row[0];

方法二:INSERT;最后一个()

$result = pg_execute($db, "INSERT INTO foo (bar) values (123);");
$insert_query = pg_query("SELECT lastval();");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];

方法三:nextval();插入

$insert_query = pg_query($db, "SELECT nextval('foo_seq');");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];
$result = pg_execute($db, "INSERT INTO foo (foo_id, bar) VALUES ($insert_id, 123);");

最安全的选择是第三种方法,但它很笨拙。最干净的是第一个,但您需要运行最新的 PostgreSQL。大多数数据库抽象库还没有使用第一种方法。

关于php - mysql_insert_id 替代 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55956/

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