在PDO(使用MySQL)中执行INSERT后获取最后插入的行?

Bla*_*bam 5 php mysql database pdo

当向MySQL数据库中插入新对象(作为一行)时,我想返回最后插入的行(id并不总是足够的,因为我想在某些插入不具有任何自动增量的泛型函数中使用此对象) ID)。

我需要使用它来使整个对象重新获得成功,并使用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?
Run Code Online (Sandbox Code Playgroud)

一个独立于数据库的解决方案会很好,但是如果它是MySQL特定的,那也是可以的:-)

编辑:为了防止一些误解-例如,我的表user_contact_connection具有以下行(contact_id,user_id,additional_connection_info)。主键是(contact_id,user_id)。在这种情况下,PDO :: lastInsertId返回0,因为没有自动增量列。

好的,在这种情况下,我知道我一直在插入哪一行,但是我仍然希望找到一种方法来获取一般插入的最后一行而无需显式查询ID?这有可能吗?

mar*_*ful 0

如果您想在数据库中持久化后使用对象,并且希望该对象具有数据库计算的值(例如,恢复插入语句中未提供的默认值,请获取从 MySQL 生成的时间戳NOW() 等),可能最好的是插入后获取。但是,使用像 Doctrine 这样的 ORM 库,您可以在持久化之前使用所有值构造对象,但随后您必须提供默认值、时间戳等(无论如何都必须获取自动增量)。