2011-09-09 7 views
29

Jak stwierdzić, kiedy aktualizacja MySQL była udana w porównaniu do faktycznie zaktualizowanych danych?Jak stwierdzić, kiedy aktualizacja MySQL była udana w porównaniu do faktycznie zaktualizowanych danych?

Przykład:

TABLE 
id city_name 
1  Union 
2  Marthasville 

Jeżeli uruchomić następujące:

$data = array('city_name', 'Marthasville'); 

//update record 2 from Marthasville to the same thing, Marthasville. 
$this->db->where('id', 2); 
$this->db->update('table', $data); 

if($this->db->affected_rows() > 0) 
{ 
    //I need it to return TRUE when the MySQL was successful even if nothing was actually updated. 
    return TRUE; 
}else{ 
    return FALSE; 
} 

ten powróci TRUE każdym oświadczenie Update jest udane, ale FALSE gdy nie wiersze zostały faktycznie aktualizowany.

Potrzebuję go, aby zwrócić TRUE za każdym razem, gdy instrukcja UPDATE została pomyślnie wykonana, nawet jeśli faktycznie nie zmienia żadnych rekordów.

Odpowiedz

38

Wystarczy popatrzeć na mysql_affected_rows()

Należy powiedzieć, czy coś było faktycznie aktualizowane w przeciwieństwie do niczego została zaktualizowana w wyniku zwrotu prawdziwe.

php.net mówi:

mysql_affected_rows()

Zwraca liczbę wierszy w przypadku sukcesu i -1 jeśli ostatni zapytania nie powiodło się.

Można użyć następujących czynności, aby osiągnąć pożądane rezultaty:

if($this->db->affected_rows() >= 0){ } 
+0

Właśnie aktualizowane raz moje pytanie do bardziej wyraźnie stwierdzić, problem mam z użyciem mysql_affected_rows(). Żałuję, że nie napisałem tak szybko mojego pytania: S – zechdc

+1

Uważam, że odpowiedź JLeafgle była nadal poprawna. mysql_affected_rows zwróci -1, jeśli ostatnie zapytanie nie powiodło się, w przeciwnym razie powróci> = 0. Zakładając, że to jest to, czego szukasz, to po prostu zmień instrukcję if na ... "if ($ this-> db-> affected_rows()> = 0) " –

+0

Masz rację @Jon Stirling. Zaktualizowałem odpowiedź Jleagle'a, aby odzwierciedlić Twoją sugestię, ale nie mogę zatwierdzić edycji, więc gdyby ktoś inny mógł, to byłoby wspaniale. Dzięki! – zechdc

10

Następnie należałoby użyć mysql_query: Oświadczenia

SQL, INSERT, UPDATE, DELETE, DROP, itp, mysql_query() zwraca TRUE w przypadku sukcesu lub FALSE w przypadku błędu.

Proste tak:

$result = $this->db->update('table', $data); 

if($result) 
{ 
    //without error even no row updated 
} else { 

} 
+0

Dzięki za odpowiedź. Twój kod będzie działał w mojej sytuacji, jednak odpowiedź Jleagle'a działa trochę lepiej w moim kodzie. – zechdc

+0

Czy dotyczy to również obiektu PDO w późniejszych wersjach PHP? –