PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

алтернатива на mysql_insert_id за postgresql

От гледна точка на 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. OID са изключени по подразбиране от PostgreSQL 8.1.

Така че, в зависимост от това коя версия на 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; 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

$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 все още не използват първия метод.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мигриране от MSSQL към PostgreSQL – какво трябва да знаете

  2. Как Atan2() работи в PostgreSQL

  3. Агрегирани колони с допълнителни (отличителни) филтри

  4. Как да възстановим PostgreSQL дъмп файл в Postgres бази данни?

  5. PHP масив към postgres масив