Codeigniter 3: не удается отследить ошибку базы данных с помощью блока try catch

Я работаю над 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.

Любая помощь будет оценена.

1

Решение

Что касается 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 () вернет массив содержащий его код а также сообщение.

Это немного неполно по моему мнению, потому что это не показывает код ошибки и сообщение об ошибке в коде примера.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector