【问题标题】:Codeigniter 3 Transaction doesn't work error handlingCodeigniter 3 Transaction 不起作用错误处理
【发布时间】:2018-03-23 08:08:18
【问题描述】:
public function addData()
{
    $this->db->trans_begin();
    try{
        if ($this->form_validation->run() == TRUE){
            $menu = array(
                'menu_name' => $label,
                'url' => $path,
                'parent_id' => $parent,
                'icon' => $icon,
                'status' => 1,
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            );

            $this->db->insert('tbl_menu', $menu);
            $last_menu_id = $this->db->insert_id();

            foreach ($roles as $key => $value) {
                $permission = array(
                    'role_id' => $value,
                    'menu_id' => $last_menu_id,
                    'status' => 1,
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s')
                );
                $this->db->insert('tbl_permissions', $permission);
            }
            $this->session->set_flashdata('success','Menu Added Successfully...!!!');
        }else{
            $this->session->set_flashdata('error','You have to fill fields...!!!');
        }
        $this->db->trans_commit();

        redirect('menu/add'); 
    }catch(Exception $e){
        $this->db->trans_rollback();
        $this->session->set_flashdata('error',$e->getMessage());
        redirect('menu/add');
    }
}

大家好, 在这里,第二个表名不正确。但是当我运行代码时,它不会返回错误并且不会回滚(它将数据插入到第一个表中)。有什么问题..?

【问题讨论】:

    标签: php transactions codeigniter-3


    【解决方案1】:
        $this->db->trans_begin();
        if ($this->form_validation->run() == TRUE){
            $menu = array(
                'menu_name' => $label,
                'url' => $path,
                'parent_id' => $parent,
                'icon' => $icon,
                'status' => 1,
                'sequence' => $sequence,
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s'),
            );
    
            $this->db->insert('tbl_menu', $menu);
            $last_menu_id = $this->db->insert_id();
    
            foreach ($roles as $key => $value) {
                $permission = array(
                    'role_id' => $value,
                    'menu_id' => $last_menu_id,
                    'status' => 1,
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s')
                );
                $this->db->insert('tbl_permissions', $permission);
            }
            $this->db->trans_complete();
            $trans_status = $this->db->trans_status();
            if($trans_status == FALSE){
                $this->session->set_flashdata('error','Some issue with data inserting..!!!');
                $this->db->trans_rollback();
            }else{
                $this->session->set_flashdata('success','Menu Added Successfully...!!!');
                $this->db->trans_commit();
            }
        }else{
            $this->session->set_flashdata('error','You have to fill fields...!!!');
            $this->db->trans_rollback();
        }
    

    最后我这样尝试了。它成功了。删除了“try-catch”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-07
      • 2017-04-07
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多