JError a été déconseillé dans J3.x, au profit des exceptions PHP, car il mélangeait 2 concepts de programmation différents : la journalisation et la gestion des erreurs (le côté de la journalisation a maintenant été implémenté en tant que JLog ).
Pour votre cas exact, vous pouvez envelopper votre code dans un bloc try / catch pour obtenir l'erreur, comme indiqué dans cette réponse SO :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Notez que $database->execute()
cela ne fonctionne PAS en J2.5 . Vous devez utiliser $database->query()
si vous avez besoin d'un équivalent.
Dans Joomla 2.5 et 3.x, les JDatabase
méthodes d'objet updateRecord()
et insertRecord()
génèrent également des erreurs que vous pouvez détecter en cas d'échec:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Si vous développez pour Joomla 3.x uniquement, vous pouvez également utiliser un bloc try catch avec des transactions SQL pour obtenir les détails de l'erreur:
$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);
}
Idéalement, installez pecl, puis étendez la classe JDatabase * appropriée et remplacez JFactory :: getDbo () avec une implémentation de ce qui suit pour éliminer la nécessité de mettre à jour un milliard de code pour encapsuler chaque requête db critique dans les instructions try catch.
La prochaine meilleure chose pour moi est le support ci-dessous pour l'ancienne et la nouvelle façon:
Inclure cela quelque part
Ensuite, utilisez-le comme ceci
la source