I postgresql tabloya eklenen son satırın id almak için kullandığınız yolu verimli olup olmadığını merak Im ..
Açıkçası, çalışır, ama birçok kullanıcı aynı anda aynı tabloda satırlar ekleyerek olduğunda seri dizisi currval değerine başvuran sorunlu olabilir.
Benim gerçek yoludur:
$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect');
$insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')");
$last_id_query = pg_query("SELECT currval('customer_id_seq')");
$last_id_results = pg_fetch_assoc($last_id_query);
print_r($last_id_results);
pg_close($pgConnection);
Well, its just a test atm. But anyway, i can see 3 issues with this way:
- Iki kullanıcı aynı anda aynı şeyi yaparsanız customer_id_seq üzerine başvurulması, onlara bu şekilde gelen aynı kimliği almak ... ya da değil de o olabilirdi?
- I have to know tablonun dizisi adı. Pg_get_serial_sequence Dont benim için çalışıyor becose (postgresql im acemi, muhtemelen bir yapılandırma sorunu)
Herhangi bir öneri / daha iyi yollar?
ps: i PDO kullanamaz, işlem kayıt noktası ile biraz eksikliği becose görünüyor; Ben kullanım zend alışkanlık ve, sonunda, (belki sonunda benim sınıfları inşa edeceğiz) php pg_ * işlevleri kullanmayı tercih edeceksiniz
EDIT:
@ Spliff (Thet onun cevabı silindi): Bu daha iyi çalışır ki?
$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect');
pg_query("BEGIN");
$insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')");
$last_id_query = pg_query("SELECT currval('customer_id_seq')");
$last_id_results = pg_fetch_assoc($last_id_query);
print_r($last_id_results);
//do somethings with the new customer id
pg_query("COMMIT");
pg_close($pgConnection);