如何检索所有最后插入的行id在mysql-php


How to retrieve all last inserted rows IDs in mysql-php?

是否有任何有效的方法来检索所有最后插入的行自动增加的id从mysql数据库使用php?假设我不知道在批处理中有多少行要插入,但我需要插入后的所有id。

在谷歌之后,我没有找到任何有效的方法来做到这一点,所以我不确定这是可能的。我可以遵循这一个,但必须多次点击数据库检索id。

$data = array (
array(1,2),
array(3,4),
array(5,6)
);
$ids = array();
foreach ($data as $item) {
   $sql = 'insert into table (a,b) values ('.$item[0].','.$item[1].')';
   mysql_query ($sql);
   $ids[] = mysql_insert_id();
}

谢谢

您的代码已接近完整解决方案。

$data = array (
array(1,2),
array(3,4),
array(5,6)
);
$ids = array();
foreach ($data as $item) {
   $sql = "INSERT INTO `table` (`a`, `b`) VALUES ('{$item[0]}' ,'{$item[1]}');";
   mysql_query ($sql) or mysql_error();
   $ids[] = mysql_insert_id();
}
var_dump($ids);

如果问题是关于性能问题,那么另一个解决方案可以是

foreach ($data as $item) {
   $sql = "INSERT INTO `table`.`table` (`a`, `b`) VALUES ('{$item[0]}' ,'{$item[1]}');";
   mysql_query ($sql) or mysql_error();
}
$last_id = mysql_insert_id();
$total = count($data);
for($i = 0; $i <= $total; $i++){
    $ids[] = $total-$i;
}

Mysql只返回最后插入的id,不幸的是没有办法检索所有的id(直接)。您将不得不使用变通方法,例如:

  1. 计算插入的行数和最后插入的ID,并反向计算剩余的行数

  2. 生成自定义ID,而不是让mysql增量地创建它们,如果插入查询成功,将ID存储到数组中(通常如果其中一个失败,整个查询将失败)

建议使用第二种方法,因为对于n1,如果您正在执行稍微复杂的操作,例如使用INSERT blah blah ON DUPLICATE KEY,修改将被计数为2次插入(不要问我为什么)而不是一次,并且您必须做一些计算来查看实际插入的数量和修改的数量。

顺便说一下,停止使用mysql_扩展名,它已被弃用,使用mysqli或pdo代替

如果你的auto_increment字段是"normal",所以它不会以某种特殊的方式表现,而是将最后一个id增加1,你可以在插入之前找到它的最大值,然后找到所有比它高的记录。

的例子:

$sql = "SELECT id FROM table ORDER BY id DESC LIMIT 1";
    // get maximal value before insert
$sql = "SELECT id FROM table WHERE id > :last_id"; // get all new

当我需要跟踪批量输入的记录时,我在表中有一个额外的字段,通常标记为邮票或其他东西。当插入记录时,戳字段将使用time()函数给出的当前时间戳填充。然后每批货都可以被追踪,不管它们有多旧。另外,保存时间戳是获得添加时间的一种简单方法。

获取最后一个插入id的id

    <?php
$conn = mysql_connect('localhost', 'user', 'password');
mysql_select_db('test');
$data = array (
array(1,2),
array(3,4),
array(5,6)
);
$ids = array();
foreach ($data as $item) {
   $sql = 'insert into testtable (a,b) values ('.$item[0].','.$item[1].')';   
   mysql_query ($sql, $conn);
   $id[] = mysql_insert_id($conn);
}