我正在使用$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手册说:
在具有AUTO_INCREMENT字段的表上运行扩展插入时, mysqli_insert_id()的值将等于 first 的值 插入行。
我的测试似乎证实了这一点。
注意:我不想只是第一个或只是最后一个。
我不想再恢复成千上万的单个插入,以便我可以单独获取auto_allocated密钥。
有没有人知道如何进行扩展插入并获取所有已分配的密钥(可能是在数组中)?
在进行扩展写入之前,我确实只是读取并保留了最新的现有密钥,然后计算分配密钥的预期值,但这看起来确实有点像。
答案 0 :(得分:0)
我认为您不能获得所有新插入的行ID,但如果insert_id
返回第一个 ID,您可以假设插入的ID是范围该ID对插入的数量(除非出现问题,应该是这种情况,但是整个插入应该失败,因为它是原子的)。您还可以选择所有大于或等于新insert_id
的auto_increment ID。
答案 1 :(得分:-1)
你可以计算出钥匙吗,不是吗?
$keys=array();
for($id=mysqli_insert_id();$id<=$id+$totalRecords;$id++)
$keys[]=$id;
或使用类似学说的ORM