2011-06-30 16 views
11

Nie jestem pewien, czy to pytanie jest specyficzne dla WordPressa czy jest bardziej związane z mySQL. Próbuję dowiedzieć się, co zostanie zwrócone, jeśli zawiedzie transakcja z bazą danych. W poniższym scenariuszu aktualizuję wiersz. Jeśli żadna z wartości nie zostanie zmieniona, zwracana jest wartość false. Jeśli zmiany zostaną wprowadzone, zwracana jest prawda. Jak mogę sprawdzić, czy transakcja się nie powiodła?

$result = $wpdb->update($this->table_name, $dbfields, $where); 
if($result == false)//do fail - this is not really a fail! 
if($result == true)//do success 

Wszelkie wskazówki są mile widziane.

Odpowiedz

32

Zajrzyj wp-includes\wp-db.php. Uwagi nagłówku funkcji aktualizacji wpdb mówi:

* @return int|false The number of rows updated, or false on error. 

Tak, to podejrzewam, że chcesz zobaczyć różnicę między false (wartość logiczną wskazującą awarię) oraz 0 (liczbę całkowitą wskazującą, że zostały zwrócone żadne wiersze .)

W przypadku porównania przy użyciu ==, false i 0 są równe. Dlatego musisz użyć operatora ===, aby sprawdzić, czy masz do czynienia z boolean false lub liczbą całkowitą 0.

Więc spróbuj tych:

if ($result === false) // Fail -- the "===" operator compares type as well as value 
if ($result === 0) // Success, but no rows were updated 
if ($result > 0) // Success, and updates were done. $result is the number of affected rows. 

Zobacz the PHP manual uzyskać więcej informacji na temat === operator porównania.

+0

Bardzo dobra odpowiedź. Dziękujemy – wordpresrox

+0

Czy istnieje sposób, aby uzyskać więcej informacji na temat przyczyny niepowodzenia, opisu błędu? – RaffAl

+0

@Bearwithit Spróbuj sprawdzić '$ wpdb-> last_error'. Jest to publiczna (ciąg) zmienna, która powinna zawierać opis ostatniego błędu. –

Powiązane problemy