2011-07-23 118 views
3

我在PHP中使用PDO和PostgreSQL。是否有可能在插入之前將id插入到數據庫中

我會讓我的用戶上傳文件。

我想將記錄ID添加到保存的圖像。

是否有可能在插入數據庫之前獲取(或保留)記錄ID。

我不認爲這是可能的只是想確定。

+0

我不知道PostgreSQL,但也許你可以得到插入的最後一個ID。給它添加1可能會給你的ID插入假設你的ID是具有身份屬性的主鍵。 –

+0

如果最後一條記錄被刪除,該怎麼辦?這將明確地得到錯誤的ID。 – PeeHaa

+0

@nevayeshirazi這是一個壞主意。如果另一個會話添加一行或使用該機制獲取相同的ID,會發生什麼? – Mike

回答

8

是的,您應該使用postgres函數nextval來獲取序列中的下一個值。查看錶格id列中的默認值,它應該包含nextval對所用序列的調用。

例如,如果表看起來是這樣的:

image_id bigint not null default nextval('image_image_id_seq'::regclass) 
data bytea not null 

您可以撥打:

SELECT NEXTVAL('image_image_id_seq') ; 

從而將 「儲備」 的ID爲您稍後使用:

INSERT INTO image (image_id, data) VALUES (?, ?) ; 
+0

每個連接都是'nextval'。或者可以,我得到nextval和somelse插入一個記錄在該數據庫與該ID? – PeeHaa

+1

這是一個全局序列,當您從序列中選擇一個值時,將會增加1,並且該值不會再被使用。 –

+0

太棒了! MySQL也有這個功能嗎? – PeeHaa

1

您也可以這樣做:

BEGIN 
INSERT RETURNING 
get id 
rename file 
COMMIT 
相關問題