Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从事务中的特定查询检索最后一个\u insert \u id?_Php_Mysql_Sql_Last Insert Id - Fatal编程技术网

Php 如何从事务中的特定查询检索最后一个\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);

我有一个带有三个查询的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);
$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可能正在使用它们,但提醒这些函数不好的注释永远不会有坏处。