2010-02-04 16 views
47

Sto assemblando alcuni modelli per il mio sito codeigniter e non riesco a trovare alcuna parola nella documentazione su come gestire gli errori che potrebbero verificarsi quando si utilizza il sistema Active Record.Codeigniter - errori di gestione quando si utilizza il record attivo

La documentazione mostra come eseguire CRUD insieme ad alcune query relativamente coinvolte, ma non dove è discusso lungo la linea. Ho fatto una rapida ricerca su google e sembrerebbe che le classi di record attivi non generino eccezioni. È questo il caso? No try catch then ...

Quindi, come si codice per gestire gli errori del database in codeigniter? (connessione fallita, chiave duplicata, integrità referenziale interrotta, troncamento, tipi di dati errati ecc. ecc.)

risposta

57

Se si sta utilizzando la classe di record attiva o meno, è possibile accedere agli errori del database utilizzando $this->db->_error_message() e $this->db->_error_number().

Se si utilizza un database mysql, queste funzioni sono equivalenti rispettivamente a mysql_error() e mysql_errno(). Puoi controllare queste funzioni osservando il codice sorgente per il driver del database per il database che stai utilizzando. Si trovano nel sistema/database/driver.

Così, dopo aver eseguito una query, è possibile verificare la presenza di errori utilizzando qualcosa di simile:

if ($this->db->_error_message()) \\handle error 
+18

FYI - Questo funziona solo se si r Il flag db_debug nel file di configurazione del database è impostato su FALSE. Di default è impostato su TRUE in una nuova installazione di CI 2.1 – Felby

+1

@emmychan: potremmo rilevare un'eccezione per gestire l'errore del DB? È lo stesso con la tua soluzione? Grazie – secretlm

+0

FYI - Con PostgreSQL 9.4/CI 2.1.3, noto che '_error_number()' spesso (sempre?) Restituisce una stringa vuota ma '_error_message()' ha un testo di messaggio di errore (possibilmente multilinea). Quindi, come analizzare l'errore in varie impostazioni locali? – user9645

12

Direttamente dal forum di supporto CodeIgniter:

$res = $this->db->query($str); 

if (!$res) { 
    // if query returns null 
    $msg = $this->db->_error_message(); 
    $num = $this->db->_error_number(); 

    $data['msg'] = "Error(".$num.") ".$msg; 
    $this->load->view('customers_edit_view',$data); 
} 

noti che è possibile anche accedere attivo Record errori andando nel tuo file di configurazione dell'app CI e impostando quanto segue:

$config['log_threshold'] = 1; 
Problemi correlati