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库,你可以在持久化之前用所有的值构造对象,但是必须提供默认值,时间戳等等(无论如何都必须提取自动增量)。

相关问题