2013-12-17 20 views
5

Ich habe mehrere Artikel über das Problem gelesen, aber keiner von ihnen hat mir geholfen und ich bin ein wenig verwirrt, was zu tun ist.Der richtige Weg, um zu überprüfen, ob die MySQL-Abfrage erfolgreich war

Grundsätzlich möchte ich überprüfen, ob die SQL-Abfrage ohne Fehler durchgeführt wurde. Um dies zu tun, muss ich die beiden unten gezeigten if Anweisungen verwenden?

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

* Warum * möchten Sie das Ergebnis überprüfen? Was wirst du damit machen? –

+0

Ich muss nur wissen, ob Daten gespeichert wurden (in diesem Fall), wenn nicht, weil etwas passiert ist, muss ich das wissen und Benutzer über dieses Problem benachrichtigen ... – 0101

+0

Was ist, wenn Ihr Problem nicht mit mysqli, sondern - sagen wir - mit Speicher ? Werde einen anderen Notifier schreiben? Was ist mit Dateisystemfehlern, Division durch Null, fehlende Variable? –

Antwort

1

sollten Sie überprüfen die Rückgabewerte von prepare(), bind_param() und execute(). Sie alle geben false zurück, wenn sie fehlschlagen.

Wenn execute() nicht zurückkehrt false dann die INSERT erfolgreich durchlaufen haben sollte, und deshalb affected_rows Überprüfung nur dann sinnvoll, wenn Sie wissen wollen, wie viele Zeilen betroffen waren.

0
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

Setzen Sie diese Zeile über mysqli connect. Das ist alles was du brauchst.

Um einen Benutzer über Probleme zu benachrichtigen, überprüfen Sie den Antwortstatus der AJAX-Anfrage. Wenn es 500 ist - dann gab es ein Problem mit dem Speichern.

+0

Danke, aber ich habe noch eine Frage. Was ist, wenn das nicht genug für mich ist und ich einen Bericht erstellen möchte, zum Beispiel, sende mir eine E-Mail über einen bestimmten Fehler. Welche Option ist in diesem Fall am besten? – 0101

+0

Können Sie bitte einen * echten * Fall angeben? Also kann ich Ihnen die am besten geeignete Option sagen. Das Senden von E-Mails im Falle eines bestimmten mysql-Fehlers erscheint mir zu künstlich. –

+0

Wenn ein Fehler in einem Block aufgetreten ist (der derzeit einen Kommentar enthält, wie Sie oben sehen können) Ich möchte von diesem Ort zum Beispiel eine E-Mail senden oder auf eine andere Website umleiten. Jetzt denke ich, was der beste Weg ist, es zu tun. Muss ich all diese möglichen Fehler an diesen Stellen abfangen oder try {} catch() {} verwenden? – 0101

Verwandte Themen