Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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/62.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 菲律宾比索–;从扩展插入中检索自动递增的值_Php_Mysql_Insert Id - Fatal编程技术网

Php 菲律宾比索–;从扩展插入中检索自动递增的值

Php 菲律宾比索–;从扩展插入中检索自动递增的值,php,mysql,insert-id,Php,Mysql,Insert Id,我目前正在使用$mysqli->insert_id在插入新行时从MySQL表中检索自动分配的主键。这适用于单个插入件。这是一个简单的例子 $result = $mysqli->query($query); $NewPrimaryKey = $mysqli->insert_id; 但是,我(实际上是从这个网站上)了解到,多个插入最好使用扩展插入: insert into table (name1,name2,name3) values ('blah1','blah2',blah3'

我目前正在使用
$mysqli->insert_id
在插入新行时从MySQL表中检索自动分配的主键。这适用于单个插入件。这是一个简单的例子

$result = $mysqli->query($query);
$NewPrimaryKey = $mysqli->insert_id;
但是,我(实际上是从这个网站上)了解到,多个插入最好使用扩展插入:

insert into table (name1,name2,name3) values 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3'))
这也很有效——除非我想知道自动分配了哪些密钥

PHP手册上说:

在具有自动增量字段的表上运行扩展插入时, mysqli_insert_id()的值将等于第一个 插入的行

我的测试似乎证实了这一点

注意:我不想要第一个或最后一个

我不想为了能够单独获得自动分配的密钥而不得不恢复到数千个单插入

是否有人知道一种方法来进行扩展插入并获取分配的所有密钥(可能是在一个数组中)


在进行扩展写入之前,我确实想到了只读取并保留最新的现有密钥,然后计算分配密钥的预期值,但这似乎有点不切实际。

我认为您无法获得所有新插入的行id,但是如果
insert\u id
返回第一个id,您可以假设插入的ID是该ID到插入次数的范围(除非出现问题,否则应该是这样,但是整个插入应该失败,因为它是原子的)。您还可以选择所有大于或等于新的插入id的自动增量id。您可以计算密钥,不是吗

$keys=array();
for($id=mysqli_insert_id();$id<=$id+$totalRecords;$id++)
   $keys[]=$id;
$keys=array();

对于($id=mysqli_insert_id();$id)您考虑过ORM吗?您确定需要进行批量插入吗?如果在这种情况下,您需要将所有id返回到应用程序中,则使用批量插入的性能好处可能可以忽略不计(因为我假设您需要这些来为每个项目发出后续查询,以插入相关数据)?我没有听说过ORM。我快速浏览了一下,但这似乎是一套需要学习的新技能。我真的不想为这个问题这么做,但谢谢。我发现批量插入对性能有很大的影响。我对脚本进行计时,在这种情况下,使用单次插入和批量插入之间的运行时间差是1。2秒对0.2秒。安(不科学)x6不同。当一次处理数千条记录时,这很重要。我确实想到了这一点,但它似乎有点…手动,如果你知道我的意思的话。我希望会有某种基于MySQL的解决方案,但如果没有,我可能不得不这样做。谢谢。那不是我,至少我不这么认为。