当前位置:  开发笔记 > 编程语言 > 正文

mysql_insert_id替代postgresql

如何解决《mysql_insert_id替代postgresql》经验,为你挑选了1个好方法。

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



1> 小智..:

从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版本,您应该选择上述方法之一.当然,理想情况下,使用数据库抽象库来抽象上述内容.否则,在低级代码中,它看起来像:

方法一:INSERT ... RETURNING
// 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; lastval()
$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.但是大多数db抽象库还没有使用第一种方法.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有