2014-01-12 103 views
3

將新對象(作爲一行)插入到MySQL數據庫時我想獲取最後插入的行(id不總是夠用,因爲我想在通用函數中使用它,其中一些INSERT沒有任何自動 - 增加的ID)。在PDO中執行INSERT(使用MySQL)後獲取最後插入的行?

我需要這個使用POSSIBLY數據庫創建的id,時間戳,或者在某些情況下只是我在插入之前知道的值給予完整對象的成功 - 所以PDO :: lastInsertId不能解決問題。

$query = "INSERT INTO table (".$colinsert.") VALUES (".$colbind.")"; 
$stmt = $this->db->prepare($query); 
$ex = $stmt->execute(); 
// ... if $ex was successful, how do I retrieve the last inserted row now? 

獨立於數據庫的解決方案將是很好的,但如果它是MySQL的具體它也行:-)

編輯:爲了防止一些誤解 - 例如我有表user_contact_connection與以下行(contact_id,user_id,additional_connection_info)。主鍵是(contact_id,user_id)。 PDO :: lastInsertId在這種情況下返回0,因爲沒有自動增量列。

O.k.在這種情況下,我知道我插入了哪一行,但是我仍然希望找到一種方法來獲取最後插入的行,而沒有顯式查詢ID?這甚至有可能嗎?

+0

你已經擁有'$ colbind',這有什麼問題?使用' - > lastInsertId'獲取最後一個插入ID並查詢該數據庫,爲您提供該行的完整信息。 – Mave

+0

你有主鍵嗎? –

+0

有時候我有一個主鍵,有一個列,有時候是一個帶有多個列的主鍵 - 就像我已經說過的,我需要它作爲一個通用函數,我希望返回行。 – Blackbam

回答

0

如果你想在使用數據庫之後使用一個對象,並且你希望該對象具有數據庫的計算值(例如,返回的是你沒有提供的insert語句的默認值,由NOW NOW()等產生的時間戳),可能最好的是在插入後獲取。然而,使用像Doctrine這樣的一些ORM庫,你可以在持久化之前用所有的值構造對象,但是必須提供默認值,時間戳等等(無論如何都必須提取自動增量)。

相關問題