JError đã không được chấp nhận trong J3.x, vì các ngoại lệ của PHP, vì nó xen kẽ 2 khái niệm lập trình khác nhau : ghi nhật ký và xử lý lỗi (phía đăng nhập hiện đã được triển khai dưới dạng JLog ).
Đối với trường hợp chính xác của bạn, bạn có thể bọc mã của mình trong khối thử / bắt để nhận lỗi, như được hiển thị trong câu trả lời SO này :
try {
...
$db->setQuery($query);
$result = $db->loadResult();
}
catch (Exception $e){
echo $e->getMessage();
}
Lưu ý rằng $database->execute()
được nêu là KHÔNG hoạt động trong J2.5 . Bạn nên sử dụng $database->query()
nếu bạn cần một tương đương.
Trong Joomla 2.5 và 3.x, các JDatabase
phương thức đối tượng updateRecord()
và insertRecord()
cũng đưa ra các lỗi bạn có thể mắc phải nếu chúng thất bại:
try {
JFactory::getDbo()->updateObject('#_table_name', $data);
} catch (Exception $e) {
//...handle the exception
}
Nếu bạn chỉ phát triển cho Joomla 3.x, bạn cũng có thể sử dụng khối thử bắt với các giao dịch SQL để nhận chi tiết lỗi:
$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);
}