Codeigniter:如何处理数据库错误?
Posted
技术标签:
【中文标题】Codeigniter:如何处理数据库错误?【英文标题】:Codeigniter: How to handle database error? 【发布时间】:2014-12-05 12:03:35 【问题描述】:我正在使用 codeigniter 和 postgresql 创建一个 Web 应用程序。我的数据库中有这个:
user
id name
unique(name)
当有人尝试用相同的名字注册时,我得到一个错误。我该如何处理它们,而不显示 codeigniter 的错误,而是显示我的自定义错误?
如果我设置$db['default']['db_debug'] = FALSE;
,我当然不会收到任何错误,但是有没有办法处理数据库错误,或者我应该检查自己是否表已经包含同名的条目?
【问题讨论】:
【参考方案1】:使用 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');
【讨论】:
【参考方案2】:我对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.
【讨论】:
感谢 Martijn 的回答,但我在问是否有其他方法可以实现这一点,也许是 codeigniter 内置的东西!【参考方案3】:正如 Martijn 所说,这是一个解决方案。
CI不会抛出异常,所以当你执行查询时,如果语句失败,它会返回NULL。
你可能想看看CodeIgniter - how to catch DB errors?
【讨论】:
以上是关于Codeigniter:如何处理数据库错误?的主要内容,如果未能解决你的问题,请参考以下文章