我在Codigniter 3的最后一个insert_id时遇到了一些问题。
我想获取最后一次插入的org_id。但是在错误中我将下面的命令用于在查询之后获取最后插入的id来记录事务。
// grab org_id from insert
$insert_org_id = $this->db->insert_id();
// create preset levels
$this->preset_levels($insert_org_id);
所以它正确地返回了日志表中最后插入的id。控制器摘录如下:
// send org_data to model for db input
$this->org_model->add_org($org_data);
// audit log
// serialize data array for audit log
$serialised_array = serialize($org_data);
// specify audit log title
$log_title = 'Create Organisation';
// send data to audit log model
$this->audit_model->add_log($serialised_array,$log_title);
// end audit log entry
**// grab org_id from insert
$insert_org_id = $this->db->insert_id();
// create preset levels
$this->preset_levels($insert_org_id);**
所以,我觉得很好,生病了就这么说:
// grab org_id from insert
$insert_org_id = $this->db->insert_id();
// create preset levels
$this->preset_levels($insert_org_id);
在添加组织的命令之后,请参阅下面的控制器摘录:
// send org_data to model for db input
$this->org_model->add_org($org_data);
**// grab org_id from insert
$insert_org_id = $this->db->insert_id();
// create preset levels
$this->preset_levels($insert_org_id);**
// audit log
// serialize data array for audit log
$serialised_array = serialize($org_data);
// specify audit log title
$log_title = 'Create Organisation';
// send data to audit log model
$this->audit_model->add_log($serialised_array,$log_title);
// end audit log entry
但它没有返回任何价值?插入的org_id是非数字的,可能是问题吗?
两个插入都是非常简单的数据库插入,见下文:
在org_model中添加组织方法
// add new organisation
public function add_org($org_data) {
$this->db->insert('organisations', $org_data);
}
并且,在audit_model中添加log方法
// add audit log entry
public function add_log($serialised_array,$log_title) {
// capture current date & time for audit log
date_default_timezone_set('Europe/London');
$date = date('Y-m-d H:i:s');
// build array of log data
$log_data = array(
'log_datetime' => $date,
'log_org_id' => $this->session->userdata('org_id'),
'log_user_id' => $this->session->userdata('user_id'),
'log_user_name' => $this->session->userdata('username'),
'log_title' => $log_title,
'log_detail' => $serialised_array
);
// insert log data to db
$this->db->insert('audit_log', $log_data);
}
那为什么一个工作而另一个不工作呢?有什么不同?
答案 0 :(得分:2)
insert_id()
应该返回为给定连接生成的最后一个自动增量值。如果org_id不是数字字段,则不能自动递增,因此insert_id()
不会为其返回任何值。