2012-02-01 15 views
17

Mam wyświetloną tabelę z zapisem i obrazem "Usuń". przy usuwaniu obrazu klikam Usuwam rekord używając ajax. supose są trzy rekordy o identyfikatorze 40,41,42 , jeśli usunę rekord z identyfikatorem = 40, odpowiedź zwraca "1", a rekord zostanie usunięty, następnym razem, gdy ponownie kliknę usuń obraz, ponownie wyświetli "1".codeigniter db-> delete() zwraca true zawsze?

kodigniters db-> delete() metoda zwraca "1" zawsze? Czy muszę sprawdzić ręcznie, czy rekord istnieje, a następnie przejść do usunięcia? poniżej jest mój kod 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")); 

Odpowiedz

41

db-> delete() powraca TRUE, jeśli operacja usuwania powiedzie. Zwróciłby tylko FALSE, jeśli NIE MOŻE usunąć tego wiersza. Myślę, że powinieneś sprawdzić coś w stylu:

$this->db->affected_rows(); 

który zwraca liczbę, a nie wartość logiczną, którą możesz sprawdzić w warunkach If.

+0

ahaaa affected_rows() działało idealnie dla mnie. Dzięki Sudhir. –

3

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

Dlaczego sądzisz delete() zwraca wartość logiczną? To jest obiekt!

var_dump() Powiedziałbym ci to. Powiedzieliby ci również, jaki to jest obiekt.

patrz kod źródłowy: https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_active_rec.php#L1716

+0

myślałem w mysql sposób (gdzie zwraca true): P Anyways thatnks za link, to pomoże mi w przyszłości. –

+0

Domyślam się, że zwracaną wartością jest 'mixed', ponieważ część od zwracania obiektu może również zwrócić' FALSE' i dowolne '$ this-> query' zwraca, które również jest" mixed ". – vstm

+0

Jest zdefiniowany jako '@return object', ale mieszany byłby lepszy. Może to być nawet obiekt, boolean lub nawet 'null'. – PiTheNumber

4

gdy usuwamy z db w CodeIgniter 2.2.0 użyciu $this->db->delete() możemy pracować z dwoma flagami: 1. $this->db->_error_message() i 2. $this->db->affected_rows()

Więc po zapytaniu db otrzymujemy 1 i 2, jak:

USUNIĘTO: '', 1

nie zostaną usunięte: '', 0 // wiersz z id nie znaleziono, ale SQL została zakończona ok

SQL ERROR: string, -1

Mój wybór jest następujący czek:

$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

od CI 3.0 to wyprowadza: 'Wezwanie do niezdefiniowanej metody CI_DB_mysqli_driver :: error_message()' - wydaje się najlepszą metodą jest użycie affected_rows() – taber

Powiązane problemy