4

我目前正在使用$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 键而不得不恢复到数千个单次插入。

有谁知道一种方法来进行扩展插入并取回所有分配的键(大概在一个数组中)?

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

4

2 回答 2

0

我不认为您可以获得所有新插入的行 ID,但如果insert_id返回第一个ID,您可以假设插入的 ID 是该 ID 到插入次数的范围(应该是这种情况,除非出了点问题,但是整个插入应该失败,因为它是原子的)。您还可以选择所有大于或等于 new 的 auto_increment ID insert_id

于 2013-03-08T15:16:43.987 回答
-1

你可以计算密钥,不是吗?

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

或者使用类似 ORM 的学说

于 2013-03-08T15:18:14.117 回答