Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 上次插入id的效率如何?_Php_Mysql_One To Many_Auto Increment_Identifier - Fatal编程技术网

Php 上次插入id的效率如何?

Php 上次插入id的效率如何?,php,mysql,one-to-many,auto-increment,identifier,Php,Mysql,One To Many,Auto Increment,Identifier,我最近遇到了一个问题,我需要能够获取我在页面上插入的查询的最后一个ID。这个过程很简单,但我想知道这个过程是如何完成的。我的代码是这样的: $query30 = $db->query("INSERT `mybb_quickexample` SET `player1` = '".$row19[username]."', `player2` = '".$row18[username]."', `games` = '".$numberofgames."'")or die( mysql

我最近遇到了一个问题,我需要能够获取我在页面上插入的查询的最后一个ID。这个过程很简单,但我想知道这个过程是如何完成的。我的代码是这样的:

$query30 = $db->query("INSERT `mybb_quickexample` SET `player1` = '".$row19[username]."', `player2` = '".$row18[username]."', `games` = '".$numberofgames."'")or die(       mysqli_error());
正如您所看到的,我刚刚在mybb_quickexample中插入了一些内容,然后它生成了一个ID。现在在它下面的代码中,我尝试定位ID

$mmid = $db->insert_id(); 

foreach($_POST['optiontitle'] as $val){
$val = $db->escape_string($val); //
echo $val;
$query30 = $db->query("INSERT `mybb_quickexample2` SET `gid` = '".$id."', `mid` = '".$mmid."', `optiontitle` = 'OPTION TITLE', `option1` = '$val'")or die(      mysqli_error());

}
如您所见,它获取最近的ID并将其放入新表中。允许这两个表在以后需要时相互对应


但是,insert_last_id是获取插入数据库的最后一行还是页面上插入数据库的最后一行?现在我不完全确定这背后的机制,但我问这个问题是因为,如果一个人和另一个人同时加载这个页面,会怎么样?是否有不匹配的ID抓取或代码仍然有效?

insert\u last\u ID
返回同一SQL会话/连接的最后插入ID(请参阅)。-SQL server不知道您的页面。只要连接/会话未共享,就不会出现任何问题(例如竞争条件)


也可以仅使用SQL获取最后插入的ID:
select last_INSERT_ID()
或直接在下面的SQL查询中使用它,以减少客户机-服务器之间的往返,如
插入表B set-foreign\u-id=LAST\u-insert\u-id(),data=“something”
(注意,如果下面的SQL语句也有一个自动递增列,那么下一个
LAST\u INSERT\u ID()(因为没有针对数据库的额外请求)


在相反的情况下,它返回连接的最后一个id。如果连接是共享的,那么最好将其包装在事务中。

其他人指出,最后一个插入id是每个MySQL连接维护的。它使用连接中的自动递增值捕获最近插入时使用的实际id。即,即使其他连接也在进行大量插入,它也会做正确的事情。(在同时为多个用户提供服务的繁忙网站上可能是这样。)

如果您需要在insert中使用它,您可以直接这样做,而无需到客户端进行任何形式的往返

INSERT INTO person (first, last) 
            VALUES ('Jack', 'Straw');

INSET INTO address (person_id, addr, town) 
            VALUES (LAST_INSERT_ID(),'10 Downing St', 'London');

看看它是如何工作的?你可以用它在插入值列表中提供一个值。当你这样使用它时,这是MySQL中最简单、最有效的事情之一。

真的吗?我今天以前从未听说过插入最后一个id这是唯一的方法(不锁定表)以线程安全的方式获取最新插入的ID。可能重复的@LightnessRacesinOrbit不是stackoverflow post。可能重复吗?