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:如何处理数据库错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Codeigniter 模板?

如何处理 Codeigniter 上的多语言 uri 重定向?

如何处理c#中的错误代码

如何处理尚未记录的现有项目? [关闭]

如何处理错误的数据类型输入

在flask中提交数据时如何处理错误