JError został przestarzały w J3.x, na korzyść wyjątków PHP, ponieważ łączył 2 różne koncepcje programowania : rejestrowanie i obsługę błędów (strona logowania została teraz zaimplementowana jako JLog ).
W twoim przypadku możesz owinąć swój kod blokiem try / catch, aby uzyskać błąd, jak pokazano w tej odpowiedzi SO :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Zauważ, że $database->execute()
stwierdzono, że NIE działa w J2.5 . Powinieneś użyć, $database->query()
jeśli potrzebujesz ekwiwalentu.
W Joomla 2.5 i 3.x JDatabase
metody obiektowe, updateRecord()
a insertRecord()
także zgłaszanie błędów, które można wychwycić, jeśli zawiodą:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Jeśli programujesz tylko dla Joomla 3.x, możesz również użyć bloku try catch z transakcjami SQL, aby uzyskać szczegółowe informacje o błędzie:
$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);
}
Idealnie zainstaluj pecl, a następnie rozszerz odpowiednią klasę JDatabase * i przesłon JFactory :: getDbo () za pomocą implementacji poniżej, aby wyeliminować potrzebę aktualizacji kodu squillion, aby zawijał każde krytyczne zapytanie db w instrukcjach try catch.
Kolejną najlepszą rzeczą dla mnie jest poniższe wsparcie starej i nowej drogi:
Uwzględnij to gdzieś
Następnie użyj tego w ten sposób
źródło