Я работаю над API, он обрабатывает запросы, поступающие от клиентов, затем получает ответ от сервера (разработанный с использованием codeigniter 3) и пересылает его обратно клиенту.
Но в случае каких-либо ошибок базы данных, таких как дублированный идентификатор или нулевые значения, класс модели не может обработать эту ошибку, чтобы отобразить правильное сообщение об ошибке. Я пробовал блок try catch, но пока не удалось.
Вот модель:
public function add() {
try {
$this->db->trans_start(FALSE);
$this->db->insert('users', $preparedData);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
throw new Exception("Database error:");
return false;
}
return TRUE;
} catch (Exception $e) {
log_message('error: ',$e->getMessage());
return;
}
}
Стоит упомянуть, что я установил для db_debug значение FALSE.
Любая помощь будет оценена.
Что касается CI 3, ниже код получает базу данных код ошибки а также сообщение об ошибке. Для db_debug установлено значение FALSE.
public function add() {
try {
$this->db->trans_start(FALSE);
$this->db->insert('users', $preparedData);
$this->db->trans_complete();
// documentation at
// https://www.codeigniter.com/userguide3/database/queries.html#handling-errors
// says; "the error() method will return an array containing its code and message"$db_error = $this->db->error();
if (!empty($db_error)) {
throw new Exception('Database error! Error Code [' . $db_error['code'] . '] Error: ' . $db_error['message']);
return false; // unreachable retrun statement !!!
}
return TRUE;
} catch (Exception $e) {
// this will not catch DB related errors. But it will include them, because this is more general.
log_message('error: ',$e->getMessage());
return;
}
}
Обратитесь к документации на https://www.codeigniter.com/userguide3/database/queries.html#handling-errors
поговорка
Если вам нужно получить последнюю ошибку, метод error () вернет массив содержащий его код а также сообщение.
Это немного неполно по моему мнению, потому что это не показывает код ошибки и сообщение об ошибке в коде примера.
Других решений пока нет …