2016-11-03 14 views
-2

Gibt es eine Möglichkeit, zwischen Fehlermeldungen zu unterscheiden, die von MySQL zurückgegeben werden, wenn die Abfrage falsch erstellt wird VS Wenn die Benutzereingabe falsch eingegeben wird?MySQL-Fehler bei falscher Abfrage VS bei falscher Eingabe

Zum Beispiel:

//WRONG QUERY 
try {  
    INSERT into table_name ('clm1','clm2') values('val1','val2'); //BAD query 
    } 
catch (PDOException $e) { 
     echo $e->getMessage(); //display the error message returned 
} 

VS.

//wrong user input 

try { 
    INSERT INTO table_name ('unique_clm1') value('duplicate_value_from_user'); 
} 

    catch (PDOException $e) { 
      echo $e->getMessage(); //display the error message returned 
    } 

Grund:

Wenn es einen Fehler in Abfrage durch den Entwickler geschrieben; der Fehler muss als roher MySQL-Fehler zum Debuggen angezeigt werden ...... während ein schlechter Benutzereintrag als eine Fehlermeldung für den Benutzer angezeigt werden muss, ohne den normalen Fluss des Codes zu unterbrechen .....

+1

Benutzereingaben sollten validiert und bereinigt werden, bevor sie die Datenbank erreichen. Mit anderen Worten, schlechte Benutzereingaben sollten * idealerweise * niemals ein Faktor sein, wenn Sie db-Abfragen ausführen. –

+0

Ich bin mir nicht sicher, ob es eine gute Idee ist, sich auf die Datenbank zur Validierung der Benutzereingabe zu verlassen. Sie sollten dies in Ihrem Code tun und den Benutzer warnen, bevor Sie überhaupt zum DB INSERT – Galz

+0

Input validation kommen. Dann sagen Sie dem Benutzer, was falsch ist, und versuchen Sie es erneut. – Irvin

Antwort

1

Sie haben ein paar Optionen:

1. Verwenden Sie INSERT IGNORE

Mittel verwenden IGNORE, dass die Abfrage nicht auf doppelten Schlüssel fehl. So bedeutet Fehler, dass ein Problem in der Abfrage vorliegt. Um zu wissen, ob es ein Duplikat gab, müssen Sie nur die Anzahl der betroffenen Zeilen ermitteln. 0 bedeutet, dass nichts eingefügt wurde (es gab also einen doppelten Wert). 1 bedeutet, dass eine Zeile eingefügt wurde. bis feste

2. Verwenden Tests

Bad Abfragen im Code schlecht Anfragen schlecht bleiben zu fangen. Sie werden für einige Benutzer nicht in Ordnung sein und dann für andere schlecht sein. Also, wenn Sie ein paar Tests an Ort und Stelle haben, werden die Tests BUGS fangen, während der Fehler im Code der Handhabung wird fangen „ging etwas schief“, das einen doppelten Eintrag sein könnte, DB-Konnektivität usw.

3. Lesen Sie den Fehler Nachricht

In Ihrem Code können Sie den Inhalt von $ e lesen und entsprechend behandeln. Wenn $ e duplicate key oder den entsprechenden Fehlercode enthält, benachrichtigen Sie den Benutzer. Andernfalls protokollieren Sie den Fehler als etwas anderes (nicht unbedingt schlechte Abfrage - DB-Konnektivität ist ein weiteres gutes Beispiel für einen Fehler, der in Laufzeit auftreten kann).

Verwandte Themen