如何在代码点火器中获取所有插入的记录ID?我正在使用insert_batch函数插入多个记录,但代码点火器 $this->db->insert_id(( 函数仅返回最后一个记录 ID。 但是我需要所有插入的记录 ID。如果有人有想法,请帮忙。
//In codeigniter this function returns only last inserted record id.
function insertStudent(){
$data[] = array('firstname'=>'firstname1','lastname'=>'lastname1');
$data[] = array('firstname'=>'firstname2','lastname'=>'lastname2');
$result = $this->db->insert_batch( 'student', $data );
return $this->db->insert_id();
}
这可以通过使用第一个 id 和计数来实现。
- 获取要插入的数据计数。(例如,在您的示例中为 2(
- 按
$this->db->insert_id()
获取第一个插入 id(例如说 30( - 现在通过 =
first record id - (count - 1)
获取最后插入记录的 id(例如 30 + (2-1( = 31(
现在,您可以查询以获取 id 介于 30 和 31 之间的数据。
如果您绝对必须为每个插入的行提供insert_id,最简单的最防故障的方法是循环多个插入而不是制作一个大胖插入。
循环遍历多个插件将允许您获得所有insert_ids。它还允许您在其中一行插入失败并且数据库因此拒绝所有数据时不会丢失所有数据。
我最好的解决方案是更新DB_driver.php。
- 从
public function is_write_type($sql)
{
return (bool) (preg_match('/^s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD|COPY|ALTER|RENAME|GRANT|REVOKE|LOCK|UNLOCK|REINDEX)s+/i', $sql);
}
- 自:
public function is_write_type($sql)
{
return (bool) (preg_match('/^s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD|COPY|ALTER|RENAME|GRANT|REVOKE|LOCK|UNLOCK|REINDEX)s+/i', $sql) && !preg_match('/ RETURNING /i', $sql));
}
真正最安全的方法是:
- 在表中添加列
code
。 - 在批量插入之前创建代码
[id session user]-[current time stamp]
应该就足够了。 - 将该代码的所有元素批量插入
code
列中 - 查询搜索该代码
Select
,您将在批量插入时插入所有元素
这是一个有效的方法:
由于您的记录具有结果 ID,因此我假设它们也会自动递增。
如果是这种情况,您可以执行此操作并仍然使用insert_batch
.
以下是您的工作:
-
对要插入的项目进行计数:
$count = count($data);
-
运行批处理插入:
$this->db->insert_batch('student', $data);
-
获取批处理的第一个插入 ID:
$first_id = $this->db->insert_id();
-
将计数(减 1(添加到插入 ID 中,即可获得最后的记录 ID。
$last_id = $first_id + ($count-1);
给你!您现在拥有插入记录的第一个和最后一个 ID,以及介于两者之间的其他所有内容。
function insertStudent(){
$data[] = array('firstname'=>'firstname1','lastname'=>'lastname1');
$data[] = array('firstname'=>'firstname2','lastname'=>'lastname2');
$result = $this->db->insert_batch( 'student', $data );
$a= $this->db->get('student');
$data = $a->result_array();
echo($data[0]['id']);
}
希望这会对你有所帮助。