Codeigniter insert_id()奇怪的问题

时间:2016-05-06 14:06:37

标签: php mysql codeigniter

我在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);  

}   

那为什么一个工作而另一个不工作呢?有什么不同?

1 个答案:

答案 0 :(得分:2)

insert_id()应该返回为给定连接生成的最后一个自动增量值。如果org_id不是数字字段,则不能自动递增,因此insert_id()不会为其返回任何值。