我正在使用codeigniter和postgresql创建一个Web应用程序。我在我的数据库中有这个:
user
id name
unique(name)
当有人尝试使用相同名称注册时,我收到错误消息。如何处理它们,而不显示codeigniter的错误并显示我的自定义错误?
如果我设置$db['default']['db_debug'] = FALSE;
我当然没有得到任何错误,但是有没有办法处理db错误,或者我应该检查自己表是否已经包含具有相同名称的条目?
答案 0 :(得分:2)
使用Codeigniters表单验证类。 is_unique [table.columnName]。这将为您完成工作。以下是一个例子
$this->form_validation->set_rules('name', 'Name', 'is_unique[table_name.Name]');
然后只需设置引用is_unique验证的自定义消息,如下所示
$this->form_validation->set_message('is_unique', 'Name already exists');
答案 1 :(得分:0)
我不知道任何关于codeigniter的事情,但我会假设原理的工作方式相同:
首先进行SELECT id FROM tablename WHERE name='SomeName' LIMIT 1
之类的查询,然后检查行数。这种检查很正常。尽可能多地控制(有意义)可以避免错误。
零行?安全插入。不是零行?显示“用户名已全部用完”等内容。
一些代码示例:
$check = mysqli_query("SELECT id FROM tablename WHERE name='SomeName' LIMIT 1");
if( $check->num_rows!==0 ){
echo 'Username allready taken'; // echo is bad, you should process this better, but this is easy demo
}
else{
// Your normal inserting code goes here.
}
答案 2 :(得分:0)
就像Martijn所说,这是一个解决方案。
CI不会抛出异常,因此当您执行查询时,如果语句失败,它将返回NULL。