JError устарела в J3.x в пользу исключений PHP, так как в ней смешаны 2 разные концепции программирования : ведение журнала и обработка ошибок (теперь сторона ведения журнала реализована как JLog ).
Для вашего точного случая вы можете заключить код в блок try / catch, чтобы получить ошибку, как показано в этом ответе SO :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Обратите внимание, что $database->execute()
указано, что НЕ работает в J2.5 . Вы должны использовать, $database->query()
если вам нужен эквивалент.
В Joomla 2.5 и 3.x JDatabase
методы объекта, updateRecord()
а insertRecord()
также выбрасывают ошибки, которые вы можете поймать, если они потерпят неудачу:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Если вы разрабатываете только для Joomla 3.x, вы также можете использовать блок try catch с транзакциями SQL, чтобы получить подробную информацию об ошибке:
$db = JFactory::getDbo();
try {
$db->transactionStart();
$query = $db->getQuery(true);
$values = array($db->quote('TEST_CONSTANT'), $db->quote('Custom'), $db->quote('/path/to/translation.ini'));
$query->insert($db->quoteName('#__overrider'));
$query->columns($db->quoteName(array('constant', 'string', 'file')));
$query->values(implode(',',$values));
$db->setQuery($query);
$result = $db->execute();
$db->transactionCommit();
}
catch (Exception $e) {
// catch any database errors.
$db->transactionRollback();
JErrorPage::render($e);
}
В идеале установите pecl, затем расширьте соответствующий класс JDatabase * и переопределите JFactory :: getDbo () с помощью реализации, приведенной ниже, чтобы исключить необходимость в обновлениях кода в несколько миллиардов, чтобы обернуть каждый критический запрос БД в операторах try catch.
Следующая лучшая вещь для меня - это поддержка старого и нового способов:
Включите это где-нибудь
Тогда используйте это как это
источник