获取最后插入的ID mysql php的数组
我有一个类似的问题获取最后插入的ID mysql php的数组,php,mysql,arrays,Php,Mysql,Arrays,我有一个类似的问题 插入tbl(str)值('a')、('b')、('c') 如果我只有一个insert,那么通过使用mysqli\u insert\u id($con)我可以插入最后一个id,但是如何在这个多插入查询中插入所有id?这个last\u insert\u id()的行为是 当前执行的语句不影响 最后一个插入ID()。假设生成一个自动增量值 使用一条语句,然后引用 多行INSERT语句,用于将行插入到具有 自己的自动增量列。最后一个\u INSERT\u ID()的值将保持不变 第二
插入tbl(str)值('a')、('b')、('c')
如果我只有一个insert,那么通过使用
mysqli\u insert\u id($con)
我可以插入最后一个id,但是如何在这个多插入查询中插入所有id?这个last\u insert\u id()的行为是
当前执行的语句不影响
最后一个插入ID()。假设生成一个自动增量值
使用一条语句,然后引用
多行INSERT语句,用于将行插入到具有
自己的自动增量列。最后一个\u INSERT\u ID()的值将保持不变
第二句话稳定;它对于第二个和更高版本的值
行不受早期行插入的影响。(不过,如果你
混合引用LAST\u INSERT\u ID()
和LAST\u INSERT\u ID(expr)
,即
效果未定义。)
如果您确实需要它,可以使用foreach和array\u push来测试它
<?php
$InsetQueryArray = array(
"Insert into tbl(str) values('a')",
"Insert into tbl(str) values ('b')",
"Insert into tbl(str) values('c')"
);
$allLasIncrementIds = array();
foreach ($InsetQueryArray as $value) {
//execute it mysql
//Then use array_push
array_push($allLastIncrementIds, mysqli_insert_id($con));
}
?>
如果只是几行,您可以切换到发送带有最后一个插入id()的单个插入。否则会显著降低应用程序的速度。您可以为这些大容量插入创建一个标记,该标记将设置为在大容量插入本身上标识此大容量插入的数字,您可以稍后获取这些ID:
insert into tbl (stuff, tmp_marker) values ("hi",1715),("ho",1715),("hu",1715);
select group_concat(id) from tbl where tmp_marker = 1715;
update tbl set tmp_marker=0 where tmp_marker=1715;
如果这些批量插入有意义,您还可以创建一个带有用户、时间和文件名的表import\u tbl
,并保留1715作为该导入的参考
编辑:讨论之后,我会去一个导入表
CREATE TABLE import (id int(11) not null auto_increment primary key, user_id int(11), tmstmp timestamp);
导入开始时,插入以下内容:
INSERT INTO import set user_id = $userId;
在php中:
$importId = last_insert_id();
$stmt = "insert into tbl (str, import_id) values ('a',$import_id), ('b', $import_id),('c',$importId);
然后,可以使用最近导入的行的id执行任何操作
我没有研究多行插入是否保证会导致连续的一行id,就像假定最后一行插入和num行的组合一样。如果这种情况持续下去,即使MySQL增加了并行化。所以我认为依赖它是危险的。但这会影响性能吗?使服务器速度太慢?您的查询与foreach(){mysqli_查询(插入到…//3次a、b和c}
从php发送数千个单独的查询,而不是3个长的插入到。。。值(),(),。。。速度肯定要慢得多。我使用了上次的插入id()和行计数(),效果很好。这些方法行吗?我认为依赖一堆ID有点脏,但只要它有效就行。如果您认为“导入”(或从何处获取数据)是一个实体,请使用导入表。我不确定当insert语句中断或使用您的方法停止时会发生什么情况。如果一个用户插入行,我使用我的方法计算ID,突然另一个用户同时插入,那么两个用户插入的ID会混合吗?还是一块接一块地插入?是的,问得好。我希望它是一个接一个的查询,但是您应该使用脚本来尝试。我不知道是否在查询中插入20行或2000行。我更喜欢我的方式,因为这只需要稍微多做一点工作,而且我可以将插入用户、时间等存储在“导入”表中。但这并不意味着稍微简单一点的选择是错误的。这个id列表有多重要?如果系统弄混了什么,会出什么问题?非常重要!系统被扰乱了!有没有可能搞混?