2013-12-17 12 views
5

Przeczytałem kilka artykułów na ten temat, jednak żaden z nich nie pomógł mi i jestem nieco zdezorientowany, co robić.Właściwy sposób sprawdzenia, czy zapytanie mysqli zakończyło się powodzeniem

Zasadniczo chcę sprawdzić, czy kwerenda sql wykonywane bez żadnych błędów. Aby to zrobić, czy muszę użyć obu poniższych oświadczeń if?

if($stmt = $mysqli->prepare("INSERT INTO table VALUES (?, ?, ?);")) 
{ 
    $stmt->bind_param("sss", $a, $b, $c); 

    if(!$stmt->execute()) 
    { 
     // Do I have to catch the problem here? 
    } 

    if($stmt->affected_rows === -1){ 
     // Do I have to catch the problem here? 
    } 

    $stmt->close(); 
} 
else 
{ 
    // Do I need to catch the problem here? 
} 
+0

* Dlaczego * chcesz sprawdzić wynik? Co zamierzasz z tym zrobić? –

+0

Po prostu muszę wiedzieć, czy dane zostały zapisane (w tym przypadku), jeśli nie dlatego, że coś się stało, muszę to wiedzieć i powiadomić użytkownika o tym problemie ... – 0101

+0

Co zrobić, jeśli problem nie dotyczy mysqli, ale - powiedzmy - z pamięcią ? Czy napiszesz inny zgłaszający? A co z błędami systemu plików, dzieleniem przez zero, brakującą zmienną? –

Odpowiedz

1

Należy sprawdzić wartości powrotów prepare(), bind_param() i execute(). Wszystkie one zwrócą false, jeśli nie.

Jeśli execute() nie zwraca false wtedy INSERT powinny przeszły pomyślnie, a więc sprawdzenie affected_rows ma sens tylko jeśli chcesz wiedzieć ile wierszy zostały naruszone.

0
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

Ustaw powyższą linię powyżej mysqli. To wszystko, czego potrzebujesz.

Aby powiadomić użytkownika o problemach, sprawdź status odpowiedzi żądania AJAX. jeśli jest 500 - wystąpił problem z zapisaniem.

+0

Dzięki, ale mam jeszcze jedno pytanie. Co, jeśli to mi nie wystarcza i chcę zrobić raport, mam na myśli na przykład wysłanie do siebie wiadomości o konkretnym błędzie. Która opcja jest najlepsza w tym przypadku? – 0101

+0

Czy możesz podać * rzeczywisty * przypadek? Więc będę mógł powiedzieć ci najbardziej odpowiednią opcję. Wysyłanie wiadomości e-mail w przypadku jednego konkretnego błędu mysql wydaje mi się zbyt sztucznym przypadkiem. –

+0

Jeśli wystąpił błąd w jakimś bloku (Który obecnie zawiera komentarz, jak widać powyżej) Chcę wysłać z tego miejsca na przykład e-mail lub przekierować na inną stronę internetową. Teraz zastanawiam się, jaki jest najlepszy sposób na zrobienie tego. Czy muszę złapać wszystkie możliwe błędy w tych miejscach lub użyć try {} catch() {}? – 0101

Powiązane problemy