如何从事务中的特定查询中检索last_insert_id?

时间:2012-07-18 17:34:36

标签: php mysql sql last-insert-id

我有一个包含三个查询的mysql事务

在第三个查询中,我试图从之前的两个查询中提取last_insert_id值。

VALUES ('".$result1[last_id]."','".$result2[last_id]."')";

但它不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您应首先获取最后一个插入ID,然后将其注入查询。假设您正在使用mysql_函数:

mysql_query($query1);
$id1 = mysql_insert_id();

mysql_query($query2);
$id2 = mysql_insert_id();

$query3 = "INSERT INTO ... VALUES (".$id1.", ".$id2.");";
mysql_query($query3);

答案 1 :(得分:1)

假设您使用的是MySQL数据库。您可以获得如下ID:

mysql_query($first_query);
$first_result_id = mysql_insert_id();

mysql_query($second_query);
$second_result_id = mysql_insert_id();

$third_query = "INSERT INTO table  (column1, column2) VALUES (".$first_result_id .", ".$second_result_id .");";
mysql_query($third_query);

希望这有帮助

答案 2 :(得分:1)

您可以使用MySQL

SELECT LAST_INSERT_ID()

将检索给定事务中的最后一个插入ID。您也可以在其他DBMS中执行此操作,但显然您正在使用MySQL。

既然如此,php中的MySQL API也有这样的捷径:

//mysql_*
$id = mysql_insert_id();

//PDO
$pdo = PDO_OBJECT;
$pdo->query();
$id = $pdo->lastInsertId();

//mysqli
$my = MYSQLI_OBJECT;
$my->query();
$id = $my->insert_id;

注意: @ HopeIHelped的回答具有误导性。只要您在同一交易中,就没有竞争条件。 LAST_INSERT_ID()检索给定事务中的最后一个ID(以及上面的API也是如此),所以即使你有这个文件同时运行大量事务和联锁查询,你也可以安全地使用它们。