0

使用我的扩展从 Joomla 2.5 到 3.0,我正在努力解决如何进行数据库错误处理(因为不推荐使用 GetErrorNum,另请参阅Joomla!不推荐使用 JDatabase::getErrorNum(),请改用异常处理)。

根据上面链接的问题,似乎要采取的方法是为每个代码添加以下db->query()代码:

if (!$db->query()) {
    throw new Exception($db->getErrorMsg());
}

在我看来,这使得数据库错误处理比以前更加尴尬。到目前为止,我只是checkDBError()在 DB 调用之后调用了一个函数,该函数查询 ErrorNum 并相应地处理任何可能的错误。

这与数据库查询的实际触发方式无关——有不同的方法可以做到这一点,并且在错误时会产生不同的结果:错误时$db->loadResult()返回null$db->query()返回false。所以现在将对不同的数据库访问类型进行不同的检查。

没有任何通用的方法来处理这个问题,例如告诉 Joomla 在数据库问题上抛出一些异常的方法吗?还是我必须围绕 DatabaseDriver 编写自己的包装器才能实现这一目标?还是我可能遗漏了一些明显的东西?

还是我应该暂时忽略弃用警告并继续使用 getErrorNum()?我想让我的扩展面向未来,但我也不想用笨拙的错误处理逻辑把它弄得过于混乱。

4

2 回答 2

2

刚刚发现这个讨论:https ://groups.google.com/forum/#!msg/joomla-dev-general/O-Hp0L6UGcM/XuWLqu2vhzcJ

正如我所解释的那样,有弃用警告,但无论如何还没有合适的替代品......

除非有人指出任何其他有关如何在 3.0 中执行此操作的适当文档,否则我将继续使用 getErrorNum 方法...

于 2013-01-19T11:47:54.217 回答
-1

获取 getErrorNum() 函数将解决您的问题....

   $result = $db->loadResult();

    // Check for a database error.
    if ($db->getErrorNum())
    {
        JFactory::getApplication()->enqueueMessage($db->getErrorMsg());

        return false;
    }
于 2014-12-23T14:36:32.833 回答