JError wurde in J3.x zugunsten von PHP-Ausnahmen veraltet, da zwei verschiedene Programmierkonzepte vermischt wurden : Protokollierung und Fehlerbehandlung (die Protokollierungsseite wurde jetzt als JLog implementiert ).
Für Ihren genauen Fall können Sie Ihren Code in einen Try / Catch-Block einschließen, um den Fehler zu erhalten, wie in dieser SO-Antwort gezeigt :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Beachten Sie, dass $database->execute()
zu angegebenen NICHT Arbeit in J2.5 . Sie sollten verwenden, $database->query()
wenn Sie ein Äquivalent benötigen.
In Joomla 2.5 und 3.x können Sie die JDatabase
Objektmethoden updateRecord()
und insertRecord()
auch Fehler auslösen, die Sie abfangen können, wenn sie fehlschlagen:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Wenn Sie nur für Joomla 3.x entwickeln, können Sie auch einen try catch-Block mit SQL-Transaktionen verwenden , um die Fehlerdetails abzurufen:
$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);
}
Installieren Sie im Idealfall pecl, erweitern Sie dann die entsprechende JDatabase * -Klasse und überschreiben Sie JFactory :: getDbo () mit der folgenden Implementierung, um zu vermeiden, dass eine Billion Code-Updates erforderlich sind, um jede kritische Datenbankabfrage in try catch-Anweisungen zu verpacken.
Das nächstbeste für mich ist die folgende Unterstützung für den alten und den neuen Weg:
Fügen Sie dies irgendwo hinzu
Dann benutze es so
quelle