O JError foi descontinuado no J3.x, em favor das exceções do PHP, pois misturou 2 conceitos diferentes de programação : registro e tratamento de erros (o lado do registro agora foi implementado como JLog ).
Para o seu caso exato, você pode agrupar seu código em um bloco try / catch para obter o erro, conforme mostrado nesta resposta do SO :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Observe que $database->execute()
é indicado para NÃO funcionar no J2.5 . Você deve usar $database->query()
se precisar de um equivalente.
No Joomla 2.5 e 3.xe os JDatabase
métodos de objeto updateRecord()
e insertRecord()
também lançam erros que você pode capturar se falharem:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Se você está desenvolvendo apenas para o Joomla 3.x, também pode usar um bloco try catch com transações SQL para obter os detalhes do erro:
$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);
}
O ideal é instalar o pecl, estender a classe JDatabase * apropriada e substituir JFactory :: getDbo () com uma implementação abaixo para eliminar a necessidade de um milhão de atualizações de código para agrupar todas as consultas críticas do banco de dados nas instruções try catch.
A melhor coisa para mim é o suporte abaixo para a maneira antiga e a nova:
Inclua isso em algum lugar
Então use-o assim
fonte