2012-02-01 19 views
17

Ho visualizzato la tabella con la registrazione e l'immagine "Elimina". su Elimina immagine clicca Sto cancellando il record usando Ajax. Supponiamo che ci siano tre record con ID 40,41,42 se cancello il record con ID = 40, responce restituisce "1" e il record viene cancellato, la prossima volta se faccio nuovamente clic su cancella l'immagine ritorna di nuovo "1".codeigniter db-> delete() restituisce true sempre?

codeigniters db-> metodo delete() restituisce "1" sempre? ho bisogno di controllare manualmente se il record esiste e quindi procedere per eliminare? sotto è il mio codice iin ajax.php

$res = $this->db->delete(tbl_user_groups, array('owner_id' => $admin,'user_group_id'=>$gid)); 

if($res) echo json_encode (array("success"=>"true")); 
else  echo json_encode (array("success"=>"false")); 

risposta

41

Il DB-> delete() restituisceTRUE, se un'operazione di eliminazione è successo. Restituirebbe solo FALSE se NON POTREBBE cancellare la riga. Penso che si dovrebbe essere il controllo qualcosa come:

$this->db->affected_rows(); 

che restituisce il numero e non un valore booleano, che è possibile controllare con i vostri se le condizioni.

+0

ahaaa affected_rows() ha funzionato perfettamente per me. Grazie Sudhir. –

3

Note: This answer refers to an old version. In current version delete() returns a boolean.

Perché pensi delete() restituisce un valore booleano? È un oggetto!

var_dump() avrebbe detto questo. Ti direbbe anche che tipo di oggetto è.

See Source Code: https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_active_rec.php#L1716

+0

stavo pensando in modo mysql (dove ritorna vero): P thatnks comunque per il link, questo mi aiuterà in futuro. –

+0

Immagino che il valore restituito sia 'mixed', perché una parte da restituire alla fine un oggetto potrebbe anche restituire' FALSE' e qualunque cosa '$ this-> query' restituisce che è anche' mista'. – vstm

+0

E 'definito come '@return object' ma misto sarebbe meglio. Può anche essere un oggetto, booleano o anche 'nullo'. – PiTheNumber

4

quando cancelliamo dal db in CodeIgniter 2.2.0 utilizzando $this->db->delete() possiamo operare con due bandiere: 1. $this->db->_error_message() e 2. $this->db->affected_rows()

Così, dopo di query db otteniamo 1 e 2 come:

CANCELLATO: '', 1

non eliminato: '', 0 // riga con id non trovato, ma SQL completato ok

SQL ERROR: string, -1

La mia scelta è il seguente controllo:

$this->db->delete($this->table,array('id'=>$id)); 
if ($this->db->_error_message()) { 
    $result = 'Error! ['.$this->db->_error_message().']'; 
} else if (!$this->db->affected_rows()) { 
    $result = 'Error! ID ['.$id.'] not found'; 
} else { 
    $result = 'Success'; 
} 
+1

a partire da CI 3.0 questo output: 'Chiama al metodo non definito CI_DB_mysqli_driver :: error_message()' - sembra che il metodo migliore sia l'uso di affected_rows() – taber

Problemi correlati