我目前使用$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()的值将等于第一个的值行插入。
我的测试似乎证实了这一点。
注意:我不希望只有第一个或最后一个。
我不想恢复到成千上万的单个插入,只是为了能够在单个基础上获得auto_allocated键。
有没有人知道一种方法来做扩展插入,并得到所有的键被分配(大概在一个数组)?
在进行扩展写入之前,我确实想到要读取并保留最新的现有键,然后计算分配的键的期望值,但这似乎有点夸张。
我不认为你可以得到所有新插入的行ID,但如果insert_id
返回第一个 ID,你可以假设插入的ID是该ID的插入数量的范围(除非出现问题,否则应该是这种情况,但是整个插入应该失败,因为它是原子的)。您还可以选择所有大于或等于新insert_id
的auto_increment id。
你能算出这些键,不是吗?
$keys=array();
for($id=mysqli_insert_id();$id<=$id+$totalRecords;$id++)
$keys[]=$id;
或者使用类似doctrine的ORM