2012-08-05 14 views
14

Wydaje się, że dla instrukcji INSERT można użyć if (isset($connect->lastInsertId())) w celu sprawdzenia, czy instrukcja INSERT zakończyła się pomyślnie. (Proszę mnie poprawić, jeśli się mylę.)W przypadku PDO, w jaki sposób mogę się upewnić, że instrukcja UPDATE zakończyła się pomyślnie?

Ale w przypadku instrukcji UPDATE, skąd mogę wiedzieć, czy to się udało?

Na przykład, mam jedną podstawową tak:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?"); 
$statement->execute(array($id)); 

Bardzo dziękuję z góry. Pozdrawiam

+2

Co jest pomyślnym stwierdzeniem aktualizacji w twoich oczach? – hakre

+1

Czy funkcja $ stmt-> rowCount() pomaga? – Nate

+0

Witam, jest to instrukcja, która spowodowała modyfikację co najmniej jednej wartości w tabeli. Pozdrowienia – alexx0186

Odpowiedz

14

To zależy od tego, co rozumiesz przez "sukces". Jeśli masz na myśli, że zapytanie wykonane bezawaryjnie, to albo PDO albo wyrzuci wyjątek o niepowodzeniu lub zwrocie FALSE z PDOStatement::execute(), w zależności od ustawionego trybu błędu, więc "pomyślne" zapytanie w takim przypadku byłoby po prostu tym, w którym metoda execute nie zwróciła FALSE lub wyrzuciła wyjątku.

Jeśli masz na myśli "pomyślne", ponieważ faktycznie zostały zaktualizowane wiersze (w porównaniu do zaledwie 0 zaktualizowanych wierszy), musisz sprawdzić, używając numeru PDOStatement::rowCount(), który wskaże liczbę dotkniętych wierszy z poprzedniego zapytania.

Ostrzeżenie: w przypadku aktualizacji, gdzie newvalue = oldvaluePDOStatement::rowCount() zwraca zero. Można użyć

$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

w celu wyłączenia tej nieoczekiwane zachowanie.

+0

Witam, bardzo ci za to dziękuję. Miałem na myśli "więcej niż zero wierszy zaktualizowanych". Pozdrawiam – alexx0186

+0

Bardzo dobra odpowiedź - właściwie potrzebowałem pierwszej części - prawda/fałsz :) –

+3

Zwróć uwagę na wynik rowCount: PDOStatement-> rowCount - Zwraca liczbę wierszy, na którą ma wpływ ostatnie zapytanie SQL Przy próbie aktualizacji wiersz, ale wartości nowego pola są takie same jak te, które już są zapisane w DB, rowCount zwróci 0 (ponieważ nic nie zostało faktycznie zaktualizowane!). Nie oznacza to, że instrukcja UPDATE nie została pomyślnie wykonana! –

-1
$stmt->execute(); 
$count = $stmt->rowCount(); 

if($count =='0'){ 
    echo "Failed !"; 
} 
else{ 
    echo "Success !"; 
} 
+1

Lepiej będzie, że wyjaśnisz swoją odpowiedź, Odpowiedzi tylko na kod nie są zbyt pomocne. – Arman

+0

Moja odpowiedź jest o AKTUALIZACJI. $ sql = "AKTUALIZUJ użytkowników SET premium = '1' WHERE userid = $ id"; $ stmt = $ dbConnection-> prepare ($ sql); $ stmt-> execute(); następnie powyższy kod wyświetli powodzenie lub zakończy się niepowodzeniem. –

Powiązane problemy