处理数据库错误

问题描述:

我在我的应用程序中使用了一个MVC框架,因此当我检测到在我的模型中使用数据库时发生错误时,我将异常抛回到控制器。处理数据库错误

//db querying 
//doing more db querying... 
if (error) 
    throw new ApiException('Unable to connect to User database', 1, 500); 
else if (another type of error) 
    throw new StampApiException('Could not retrieve the User', 12, 500); 

return $user; 

大多数时候,我觉得这是很好的,因为我可以只让控制器打印错误到屏幕上,从而保持所有的错误代码等...在模型中。但有时这会使代码变得相当混乱和难以处理。

这是处理此类错误的好方法吗?还是有更好/更标准的方法?

+0

php,ruby,java,c#???当前使用php编写的 – leppie

+0

,但我会假设这样的标准做法不会改变语言的语言。 – Obto

Fisrt,我会说用户不需要知道问题是数据库,管理员密码还是内存。只需为用户提供技术错误页面,并在服务器上记录错误详细信息,以便进行调试。

对于你所谈论的技术问题,最好是有一个*处理来管理它们,即抛出错误页面。 通常的地方是控制器的调度员。如果你使用框架,这个机制应该存在(例如symfony)。 这样,您不必在实际代码中混淆这些异常。

就像你发现它一样,最好的策略是只有在你能做些什么的时候才能发现异常。

例如:

  • 一个“数据库访问问题”,可以自动地由 调度处理。所以你不要在你的代码中捕获它,让它到 *处理
  • “用户未找到”可能会从你的控制器, 具有特定的待遇,以提出创建例如。所以你抓住它。
+0

所以你说的是,如果它是一个错误,模型可以自动修复让它处理它,否则抛出错误并让控制器处理它? – Obto

+0

是的,对于常见的不可修复错误,理想情况下是集中处理。 (关于这个主题的更多信息,可以在这里阅读:http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html ...异常处理也是Java世界的争论!) – Fouteier

+0

太棒了,所以它看起来像我一直在正确地处理这个问题! – Obto