Php 如何从事务中的特定查询检索最后一个\u insert \u id?
我有一个带有三个查询的mysql事务 在第三个查询中,我试图从前面两个查询中提取最后一个\u insert\u id值Php 如何从事务中的特定查询检索最后一个\u insert \u id?,php,mysql,sql,last-insert-id,Php,Mysql,Sql,Last Insert Id,我有一个带有三个查询的mysql事务 在第三个查询中,我试图从前面两个查询中提取最后一个\u insert\u id值 VALUES ('".$result1[last_id]."','".$result2[last_id]."')"; 但它不起作用。有什么建议吗?您应该首先获取最后一个插入ID,然后将其注入查询中。假设您使用的是mysql\uu函数: mysql_query($query1); $id1 = mysql_insert_id(); mysql_query($query2);
VALUES ('".$result1[last_id]."','".$result2[last_id]."')";
但它不起作用。有什么建议吗?您应该首先获取最后一个插入ID,然后将其注入查询中。假设您使用的是
mysql\uu
函数:
mysql_query($query1);
$id1 = mysql_insert_id();
mysql_query($query2);
$id2 = mysql_insert_id();
$query3 = "INSERT INTO ... VALUES (".$id1.", ".$id2.");";
mysql_query($query3);
您应该首先获取最后一个insert ID,然后将其注入查询中。假设您使用的是
mysql\uu
函数:
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数据库有所帮助。您可以获得如下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\u INSERT\u ID()
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\u INSERT\u ID()
检索给定事务中的最后一个ID(上面的API也可以),因此,即使此文件同时运行大量事务和联锁查询,您也可以安全地使用它们。在事务中使用时,必须在引用提交数组键之前调用LAST\u INSERT\u ID。除非它们在双引号字符串上下文中。示例中的引号和连接上下文切换是多余的。@laxus:不,您可以在事务中插入,但仍然可以提取id-您必须能够这样做。但您不能执行多个插入,然后调出n-2或更早插入的id。在事务中使用时,必须在引用committingArray键之前调用last_insert_id。除非它们在双引号字符串上下文中。示例中的引号和连接上下文切换是多余的。@laxus:不,您可以在事务中插入,但仍然可以提取id-您必须能够这样做。但是,您不能执行多个插入,然后调出n-2或更早插入的id。我假设由于鲁莽地内联插入参数,它是mysql\uuuu
。是的,OP可能正在使用它们,但是提醒这些函数不好的注释永远不会有坏处。我假设由于不计后果地内联插入参数,它是mysql\uuu
。是的,OP可能正在使用它们,但提醒这些函数不好的注释永远不会有坏处。