我有一个带有三个查询的mysql事务
在第三个查询中,我试图从前面两个查询中提取last_insert_id值。
VALUES ('".$result1[last_id]."','".$result2[last_id]."')";
但它不起作用。有什么建议吗?
您应该首先获得最后一个插入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);
假设您使用的是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);
希望这能帮助
您可以使用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也这样做),所以即使您让这个文件同时运行大量事务和互锁查询,您也可以安全地使用它们。