Theo quan điểm của PostgreSQL, trong mã giả:
* $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()
chỉ hoạt động khi bạn có OID. OID đã bị tắt theo mặc định kể từ PostgreSQL 8.1.
Vì vậy, tùy thuộc vào phiên bản PostgreSQL bạn có, bạn nên chọn một trong các phương pháp trên. Tất nhiên, lý tưởng nhất là sử dụng một thư viện trừu tượng hóa cơ sở dữ liệu để trừu tượng hóa những thứ ở trên. Nếu không, ở mã cấp thấp, nó trông giống như:
Phương pháp một:CHÈN ... QUAY LẠI
// 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];
Phương pháp hai: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];
Phương pháp ba:nextval (); CHÈN
$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);");
Đặt cược an toàn nhất sẽ là phương pháp thứ ba, nhưng nó khó sử dụng. Cái sạch nhất là cái đầu tiên, nhưng bạn cần phải chạy một PostgreSQL gần đây. Mặc dù vậy, hầu hết các thư viện trừu tượng db vẫn chưa sử dụng phương pháp đầu tiên.