Общая обработка ошибок базы данных Joomla 3.0

Переходя с Joomla 2.5 на 3.0 с моим расширением, я борюсь с тем, как выполнить обработку ошибок БД (поскольку GetErrorNum устарел, см. также Joomla! JDatabase::getErrorNum() устарел, вместо этого используйте обработку исключений).

Способ, который, по-видимому, соответствует указанному выше вопросу, заключается в добавлении следующего кода для каждого кода db->query():

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

На мой взгляд, это делает обработку ошибок БД более неудобной, чем раньше. До сих пор я просто вызывал функцию checkDBError() после вызова БД, которая запрашивала ErrorNum и соответствующим образом обрабатывала любую возможную ошибку.

Это не зависело от того, как на самом деле был запущен запрос к БД — есть разные способы сделать это и разные результаты при ошибке: $db->loadResult() возвращает null при ошибке, $db->query() возвращает false. Так что теперь будут разные проверки для разных типов доступа к БД.

Нет ли общего способа справиться с этим, например. способ сообщить Joomla, чтобы он выдал исключение при проблемах с БД? Или мне нужно написать свою собственную оболочку для DatabaseDriver, чтобы добиться этого? Или я упускаю что-то очевидное?

Или я должен просто игнорировать предупреждение об устаревании и продолжать использовать getErrorNum()? Я хотел бы сделать свое расширение ориентированным на будущее, но я также не хочу слишком загромождать его неудобной логикой обработки ошибок.


person codeling    schedule 19.01.2013    source источник
comment
@user3145373 user3145373 как этот другой вопрос может быть дубликатом? это об общей обработке ошибок базы данных в Joomla, особенно. 3.0, в то время как тот, на который вы ссылаетесь, касается загрузки файла в Joomla 2.5 - и хотя там есть некоторый доступ к БД, я не вижу какой-либо обработки ошибок там   -  person codeling    schedule 09.01.2014


Ответы (2)


Только что нашел это обсуждение: https://groups.google.com/forum/#!msg/joomla-dev-general/O-Hp0L6UGcM/XuWLqu2vhzcJ

Насколько я понимаю, есть это предупреждение об устаревании, но в любом случае подходящей замены пока нет...

Если кто-то не укажет какую-либо другую правильную документацию о том, как это сделать в 3.0, я буду придерживаться метода getErrorNum для выполнения вещей...

person codeling    schedule 19.01.2013
comment
Да, это то, что я бы сделал. Все дело несколько забежало вперед. - person Elin; 20.01.2013

Получите функцию getErrorNum(), которая решит вашу проблему....

   $result = $db->loadResult();

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

        return false;
    }
person Stergios Zg.    schedule 23.12.2014
comment
getErrorNum() - это именно то, что я использовал до сих пор, как я указал в вопросе... но это устарело; и что использовать вместо - это вопрос здесь, так что это полностью упускает из виду суть вопроса - person codeling; 27.01.2015