繁体   English   中英

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

[英]Getting the last inserted row after doing an INSERT in PDO (with MySQL)?

当我将一个新对象(作为一行)插入MySQL数据库时,我希望得到最后一个插入的行(id并不总是足够的,因为我想在一般的函数中使用它,其中一些INSERT没有任何自动递增标识)。

我需要这个以使用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,因为没有自动增量列。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM