Codeigniter:如何处理数据库错误?

问题描述:

我正在使用codeigniter和postgresql创建一个Web应用程序。我有这个在我的数据库内:Codeigniter:如何处理数据库错误?

user 
id name 
unique(name) 

当有人试图用相同的名称注册时,我得到一个错误。我如何处理它们,而不显示codeigniter的错误并显示我的自定义错误? 如果我设置$db['default']['db_debug'] = FALSE;我当然没有得到任何错误,但有没有办法处理数据库错误,或者我应该检查自己,如果表中已经包含一个同名的条目?

我不知道用什么笨,但即时通讯将承担的工作原理相同:

你先进行查询像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. 
} 
+0

感谢您的回答的Martijn的is_unique验证的例子,但我是问,如果有另一种方式来做到这一点或许真的建在内部codeigniter! – 2014-10-10 09:51:50

像马亭说,这是一个解决方案。

CI不会抛出异常,所以当您执行查询时,如果语句失败,它将返回NULL。

您可能希望看到CodeIgniter - how to catch DB errors?

使用Codeigniters表单验证类。 is_unique [table.columnName]。这将为你做这项工作。下面是

$this->form_validation->set_rules('name', 'Name', 'is_unique[table_name.Name]'); 

然后,只需设置一个自定义消息引用类似下面

$this->form_validation->set_message('is_unique', 'Name already exists');