1

我想为特定异常添加一些处理

Zend_Db_Statement_Exception' with message 
'SQL ERROR: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

我更喜欢在相当低级别的地方对异常消息进行字符串比较,这样在我的应用程序逻辑中,我可以简单地捕获一个友好的异常My_Module_Exception_MysqlGoneAway,例如应用逻辑。

所以在这种特殊情况下,错误是由 load() 方法触发的,所以我可以重写 Mage_Core_Model_Abstract,重载 load() 方法并添加异常处理。但这不是万无一失的,b/c 这种事情也可能由收集负载或其他代码区域触发。

所以另一种选择是覆盖lib/Varien/Db/Adapter/Pdo/Mysql.phpin app/code/local,并在那里添加异常处理,但这似乎有点矫枉过正,只是为了有一个很好的异常类。

有没有更简单的方法来做到这一点?

4

1 回答 1

1

正如您提出的最佳解决方案是在本地覆盖 MySQL.php 适配器,因为这是任何 MySQL 事务都将使用的文件。对于这个错误,虽然我会更多地调查原因,因为 MySQL 消失可能意味着存在更大的问题。

您是否正在登录 MySQL 以查看它为什么断开连接?

回到你的观点,适配器类是所有其他类继承逻辑的地方,并且是查询数据库的主要主力,有几个实例需要添加额外的逻辑来捕获异常。连接、RawQuery 等

于 2013-04-24T20:40:02.873 回答