JError ha quedado en desuso en J3.x, a favor de las excepciones de PHP, ya que entremezcló 2 conceptos de programación diferentes : registro y manejo de errores (el lado de registro ahora se ha implementado como JLog ).
Para su caso exacto, puede envolver su código en un bloque try / catch para obtener el error, como se muestra en esta respuesta SO :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Tenga en cuenta que $database->execute()
se indica que NO funciona en J2.5 . Debe usarlo $database->query()
si necesita un equivalente.
En Joomla 2.5 y 3.x los JDatabase
métodos de objeto updateRecord()
y insertRecord()
también arrojan errores que puede detectar si fallan:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Si está desarrollando solo para Joomla 3.x, también puede usar un bloque try catch con transacciones SQL para obtener los detalles del error:
$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);
}
Idealmente, instale pecl, luego extienda la clase JDatabase * apropiada y anule JFactory :: getDbo () con una implementación de lo siguiente para eliminar la necesidad de actualizaciones de código de un billón para envolver cada consulta de db crítica en las declaraciones de try catch.
Lo mejor para mí es el siguiente soporte para la forma antigua y la nueva:
Incluye esto en alguna parte
Entonces úsalo así
fuente