PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

mysql_insert_id alternativa per postgresql

Dal punto di vista di PostgreSQL, in pseudocodice:

 * $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() funziona solo dove hai OID. Gli OID sono stati disattivati ​​per impostazione predefinita da PostgreSQL 8.1.

Quindi, a seconda della versione di PostgreSQL che hai, dovresti scegliere uno dei metodi sopra. Idealmente, ovviamente, utilizzare una libreria di astrazione del database che astrae quanto sopra. Altrimenti, nel codice di basso livello, appare come:

Metodo uno:INSERT... RESTITUZIONE

// 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];

Metodo due:INSERT; ultimoval()

$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];

Metodo tre:nextval(); INSERIRE

$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);");

La scommessa più sicura sarebbe il terzo metodo, ma è ingombrante. Il più pulito è il primo, ma dovresti eseguire un PostgreSQL recente. Tuttavia, la maggior parte delle librerie di astrazione db non utilizza ancora il primo metodo.