2012-03-01 13 views
15

Jak można przetestować, aby sprawdzić, czy następujące zapytanie zostało wykonane pomyślnie?Jak określić, kiedy kwerenda została wykonana pomyślnie w PHP PDO?

$STH = $this->_db->prepare("UPDATE UserCreds SET 
    VerificationString=:newVerificationString, ExpiryDate=:expiryDate 
    WHERE UserID = :userID;"); 
$STH->execute($params); 

wiem, że mogę używać lastInsertId() gdy Dodaję nowe wiersze, ale co o aktualizacjach i wybiera?

+0

@Pekka Nie, mogę komunikaty o błędach w porządku. –

+4

http://de.php.net/manual/en/pdostatement.execute.php mówi: * Zwraca TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia. * - Dlatego należy powiązać go ze zmienną, np. '$ success = $ STH-> execute ($ params);' i sprawdź tę zmienną przed 'true' lub' false'. – Quasdunk

Odpowiedz

35

execute zwraca true na sukces i false w przypadku niepowodzenia.

From Docs:

Zwraca TRUE w przypadku powodzenia, FALSE w przypadku porażki.


więc można mieć pewność, zapytań przebiegały pomyślnie jak:

if ($STH->execute($params)) 
{ 
    // success 
} 
else 
{ 
    // failure 
} 
+0

Więc coś jak 'if ($ STH-> execute ($ params)) {echo" Sukces! "; } else {echo "Niepowodzenie!"; } '? –

+0

@DjangoReinhardt: Tak, masz rację :) Możesz również zapisać wynik polecenia 'execute' w zmiennej, jeśli chcesz go później użyć. – Sarfraz

+0

Dzięki za wyjaśnienie! –

15

execute() zwraca true/false oparciu o sukcesie/porażce zapytania:

$status = $STH->execute($params); 

if ($status) { 
    echo 'It worked!'; 
} else { 
    echo 'It failed!'; 
} 

One uwaga: zapytanie wybrane, które nie zwraca żadnych wierszy, NIE jest awarią. Jest to całkowicie poprawny wynik, który po prostu nie przynosi rezultatów.

+3

+1 Przydatna uwaga, dzięki! –

-3

Jest to najlepszy sposób, aby zweryfikować Doctrine sukces zapytania powrotną wynik lub nie wynik i tak samo jak powyżej sugerują, by sprawdzić zapytaniu pogoda powraca sukces na Prawdziwego i Failed na fałszywej.

public static function removeStudent($teacher_id){ 
     $q = Doctrine_Query::create() 
      ->delete('Student s') 
      ->where('s.teacher_id = ?'); 

     $result = $q->execute(array($teacher_id)); 

     if($result) 
     { 
     echo "success"; 
     }else{ 
     echo "failed"; 
     } 
    } 
1

prostu mogę policzyć liczbę rzędu dokonane:

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

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

Działa to tylko przy użyciu UPDATE –

+0

tak, to jest dla UPDATE, spójrz na zapytanie, które pyta, wygląda na UPDATE –

+1

Pytanie dokładnie stwierdza: "co z UPDATEs i SELECTs?" –