2009-05-28 16 views
44

Mit PHP versuche ich einen Datensatz zu löschen, aber ich möchte überprüfen, ob es erfolgreich war oder nicht. Wird irgendetwas von einem erfolgreichen DELETE FROM foo where bar = 'stuff' zurückgegeben?Was bringt ein erfolgreiches MySQL DELETE zurück? Wie überprüft man, ob DELETE erfolgreich war?

Oder kennen Sie noch andere Möglichkeiten zu überprüfen, ob ein DELETE erfolgreich war? Oder bin ich besser dran, nur sicherzustellen, dass die Zeile existiert, bevor ich sie lösche? Ich versuche, eine andere Frage möglichst zu vermeiden.

Antwort

53

Angenommen, Sie mysql_query verwenden:

Für andere Art von SQL-Anweisungen, INSERT, UPDATE, DELETE , DROP, etc, mysql_query() gibt bei Erfolg TRUE FALSE im Fehlerfall.

Wenn Sie PDO::exec verwenden, dann sagt das Handbuch dazu:

PDO :: exec() die Anzahl der Zeilen zurückgibt, die Sie herausgegeben von der SQL-Anweisung geändert oder gelöscht wurden. Wenn keine Zeilen betroffen sind, PDO :: exec() liefert 0.

Wollen nicht Schnepfe antworten, aber da dies als Antwort gewählt wurde, sollte ich das mysql_query beachten wird TRUE zurück, auch wenn die Abfrage hat eigentlich nichts entfernt. Sie sollten mysql_affected_rows verwenden, um dies zu überprüfen.

+4

„Ich will nicht Schnepfe beantworten:“ Oh nein! Nicht meine kostbaren, wertvollen Punkte! =) – biggusjimmus

+0

+1 für mysql_affected_rows –

+1

Wenn Sie PDO :: execute() verwenden, um die Anzahl der betroffenen Zeilen zu erhalten, sollten Sie PDO :: rowCount() verwenden – Alan

32

Außerdem, wenn Sie über die Anzahl der Reihen kümmern, die betroffen waren:

[Use] mysql_affected_rows(), um herauszufinden, wie viele Zeilen von einem DELETE, INSERT betroffen waren, REPLACE oder UPDATE-Anweisung.

+2

Beat mich! Zu überprüfen, ob dies> 0 ist, ist hilfreich, da mysql_query() TRUE zurückgibt, wenn die Abfrage ordnungsgemäß erstellt wurde, aber nichts gelöscht wurde. – ceejayoz

+0

@ceejayoz Könnten Sie bitte klarstellen, dass es nichts gelöscht hat, weil es nichts zu löschen gab oder wegen eines Fehlers? – MaxZoom

+0

@MaxZoom Wenn ein Fehler auftritt, gibt 'mysql_query'' FALSE' zurück. Wenn es nichts zu löschen gibt, würde 'mysql_query'' TRUE' zurückgeben und 'mysql_affected_rows' wäre' 0'. Das heißt, Sie sollten "mysql_query" ** überhaupt nicht mehr ** verwenden. – ceejayoz

13

Sie dies für Ihre PHP-Code könnten versuchen, nach Ihrer Anfrage gestellt läuft:

if (mysql_affected_rows() > 0) { 
    echo "You have successfully updated your data.<br><br>"; 
} 
else { 
    echo "The data you submitted matched the current data so nothing was changed.<br><br>"; 
} 
Verwandte Themen