【问题标题】:codeigniter database error handlingcodeigniter 数据库错误处理
【发布时间】:2011-05-26 14:06:31
【问题描述】:

控制器:

function edit($id)
{
    $this->form_validation->set_rules('name', 'Name', 'required|xss_clean');

    $this->load->model('manager_model');

    $pageData['type'] = 'managers';
    $pageData['title'] = "Edit Manager";
    $data['records'] = $this->manager_model->getManager($id);

    $this->load->view('header', $pageData);
    $this->load->view('db_options_view', $pageData);

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('managers/editManagerForm_view', $data);
    }
    else
    {   
        $name = $this->input->post('name');

        $this->manager_model->updateRecord($id, $name);

        $this->load->view('managers/editManagerSuccess_view');
    }

        $this->load->view('footer');
}   

型号:

function updateRecord($id, $name)
{
    $data = array('name' => $name);
    $this->db->where('id', $id);
    $this->db->update('manager', $data);
}

我的问题是这个。我的数据库表不接受名称字段的重复值。因此,当我测试它时,我输入了一个重复的名称,codeigniter 返回了以下内容:

发生数据库错误 错误号:1062 键 2 的重复条目“alan pardew” 更新manager SET name = 'alan pardew' 其中id = '2' 文件名:/var/www/vhosts/mysite.com/httpdocs/personal/models/manager_model.php 行号:74

我想自己在控制器中处理这个错误,我做了一些阅读,发现我必须设置 $db['default']['db_debug'] = FALSE; 以防止 codeigniter 显示错误。

是否有关闭特定错误(例如重复条目)的方法?

或者您会建议完全关闭它们吗?

另外..我对 codeigniter 还很陌生,所以如果您发现我的代码中有任何不好的做法,请随时指出!

【问题讨论】:

  • 这就是我的确切情况。为我保住工作干杯!
  • 关于这个主题的另一个重要问题是:“例如,如果您通过 PHP 循环遍历许多插入,如果在 CI 中关闭 db 错误,执行是否会继续执行,或者执行会停止而无需简单打印错误消息?

标签: database codeigniter error-handling


【解决方案1】:

如果您使用的是 MYSQL,您可以使用“INSERT IGNORE ...”(尝试插入,如果发生错误将其降级为警告,以便查询静默失败),“REPLACE INTO .. .”(插入,如果发生重复键错误,用新记录替换旧记录)或“INSERT ... ON DUPLICATE KEY UPDATE ...”(插入,如果发生重复键错误,取消插入并执行更新旧行上的声明)

例如:

INSERT INTO log(id_page, view_count) VALUES (123, 1) ON DUPLICATE KEY UPDATE view_count = view_count + 1

遗憾的是,据我所知,code igniter 的活动记录库不允许您使用它,因此您处理它的最简单方法就是在插入之前选择记录以查看它是否已经存在(或者您可以在没有活动记录的情况下自行执行查询并检查它是否返回错误代码)。

【讨论】:

    【解决方案2】:

    检查数据库 CI 有帮助:

    您可以编写一个回调函数并在验证行中使用它;

    $this->form_validation('field','fieldname','required|callback_check');
    

    函数应该是这样的

    function check($str){
        if($str exist in database){
           $this->form_validation->set_message('check','nickname in use');
           return false;
        }
        return true;
    }
    

    【讨论】:

    • This 页面还描述了如何做。
    猜你喜欢
    • 2014-12-05
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2014-01-12
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多