2017-01-18 2 views
0

Я работаю над api, обрабатывает запросы, которые поступают от клиентов, затем получает ответ от сервера (разработан с использованием codeigniter 3) и пересылает его обратно клиент.Codeigniter 3: Не удается поймать ошибку базы данных с помощью блока try catch

Но в случае ошибок базы данных, таких как дубликат идентификатора или нулевые значения, класс модели не может обработать эту ошибку, чтобы отобразить правильное сообщение об ошибке. Я пробовал блок catch try, но пока не удалось. Вот модель:

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 ЛОЖЬ.

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

+0

Перед тем, как вставить, пожалуйста, проверьте значение в базе данных –

+0

Я попытался проверить, но все же он не отображает ошибку. – skm

+0

Как вы его проверяете? Не могли бы вы обновить вопрос с кодом проверки перед вставкой? –

ответ

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

говоря

Если вам нужно, чтобы получить последнюю ошибку, которая произошла, метод ошибок() будет возвращать массив содержащий его код и сообщение.

На мой взгляд, это немного неполно, потому что в коде примера не отображается код ошибки и сообщение об ошибке.