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

时间:2014-01-12 22:27:04

标签: php mysql database pdo

当将一个新对象(作为一行)插入MySQL数据库时,我希望得到最后一个插入的行(id并不总是足够的,因为我想在一些INSERT没有任何INSERT的泛型函数中使用它自动递增的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?

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

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

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

1 个答案:

答案 0 :(得分:0)

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