Dari sudut pandang PostgreSQL, dalam kode semu:
* $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()
hanya berfungsi di mana Anda memiliki OID. OID telah dinonaktifkan secara default sejak PostgreSQL 8.1.
Jadi, tergantung pada versi PostgreSQL yang Anda miliki, Anda harus memilih salah satu metode di atas. Idealnya, tentu saja, gunakan perpustakaan abstraksi database yang mengabstraksikan hal-hal di atas. Jika tidak, dalam kode tingkat rendah, akan terlihat seperti:
Metode satu:MASUKKAN... KEMBALI
// 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];
Metode dua: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];
Metode tiga:nextval(); MASUKKAN
$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);");
Taruhan paling aman adalah metode ketiga, tetapi itu berat. Yang terbersih adalah yang pertama, tetapi Anda harus menjalankan PostgreSQL terbaru. Kebanyakan perpustakaan abstraksi db belum menggunakan metode pertama.