控制器:
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'WHERE id
='2'
文件名:/var/www/vhosts/mysite.com/httpdocs/personal/models/manager_model.php
行号:74
我想在控制器中自己处理这个错误,并且我已经做了一些阅读,发现我必须设置$db['default']['db_debug'] = FALSE;
以防止codeigniter显示错误。
是否只是关闭特定错误,例如重复发送?
或者你会建议完全关闭它们吗?
另外......我对codeigniter相当新,所以如果你能发现我的代码中的任何不良做法,请随意指出它!
答案 0 :(得分:3)
如果您正在使用MYSQL,则可以使用“INSERT IGNORE ...”处理重复的密钥(尝试插入,如果发生错误,请将其缩小为警告,以便查询无提示失败),“REPLACE INTO .. msgstr“插入,如果发生重复键错误,则用旧文件替换旧记录”或“INSERT ... ON DUPLICATE KEY UPDATE ...”(插入,如果发生重复键错误,则取消插入并执行更新关于旧行的陈述)
例如:
INSERT INTO log(id_page, view_count) VALUES (123, 1) ON DUPLICATE KEY UPDATE view_count = view_count + 1
可悲的是,代码点火器的活动记录库不允许你使用它,据我所知,所以最简单的方法是处理它只是选择记录,看它是否已经存在,然后插入它(或者您可以在没有活动记录的情况下自己执行查询,并检查它是否返回错误代码)。
答案 1 :(得分: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;
}