在CodeIgniter中处理数据库错误的最佳实践

drn*_*rnk 5 php database codeigniter

我的Web应用程序数据库中有一个带有唯一键(date+ userid)的表.当我尝试使用现有插入记录时date,userid我收到以下错误:

dupicate key in table
Run Code Online (Sandbox Code Playgroud)

我在应用程序配置中打开了数据库调试器,因为我需要使用MySQL错误号和消息.现在我需要处理这个错误.我可以在控制器中使用硬编码常量,但我认为这不是一个好主意.我需要在很多地方进行数据库错误处理,我不喜欢CodeIgniter的错误处理.有关处理数据库错误的最佳做法是什么?

poc*_*sov 10

我们在项目构造中使用如下:

$this->db->_error_number();  
$this->db->_error_message();
Run Code Online (Sandbox Code Playgroud)

但是这个没有文档的功能,在下一个版本中,这可能会改变.当然你可以简单地使用标准的php for mysql错误句柄功能:

mysql_errno()  
mysql_error()
Run Code Online (Sandbox Code Playgroud)

内部CI使用这些功能.

至于我,最好的做法是在自定义Model的基类(BaseModel)中使用

$this->db->_error_number();
Run Code Online (Sandbox Code Playgroud)

并确定错误,下一次抛出异常,并从中获取信息错误消息

$this->db->_error_message();
Run Code Online (Sandbox Code Playgroud)

所有模型派生自BaseModel,并调用方法来检查db错误的最后一个请求,并且你的Model必须处理异常,并处理它(可能是另外的日志),当然你可以实现检查结果作为结果值并避免抛出异常.