PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

alternative à mysql_insert_id pour postgresql

Du point de vue PostgreSQL, en pseudo-code :

 * $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() ne fonctionne que là où vous avez des OID. Les OID sont désactivés par défaut depuis PostgreSQL 8.1.

Ainsi, selon la version de PostgreSQL dont vous disposez, vous devez choisir l'une des méthodes ci-dessus. Idéalement, bien sûr, utilisez une bibliothèque d'abstraction de base de données qui résume ce qui précède. Sinon, dans le code de bas niveau, cela ressemble à :

Méthode 1 :INSÉRER... RENVOYER

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

Méthode deux :INSÉRER ; 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];

Méthode trois :nextval(); INSÉRER

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

Le pari le plus sûr serait la troisième méthode, mais elle est difficile à manier. Le plus propre est le premier, mais vous devez exécuter un PostgreSQL récent. Cependant, la plupart des bibliothèques d'abstraction de base de données n'utilisent pas encore la première méthode.