mysql. Nach Update, wie bekomme ich mit, ob es erfolgreich
Sandra
- datenbank
So ändere ich den Datensatz Nr.1
mysql_query("UPDATE tabelle SET name='$name' WHERE id=1");
Wenn die id mit der 1 nicht vorhanden ist, wird kein Datensatz gändert. Gibt es dann irgendeine Fehlermeldung die ich mir ausgeben kann, so das ich sehen kann wenn kein Datensatz geändert wurde?
Sandra
Hi!
mysql_query("UPDATE tabelle SET name='$name' WHERE id=1");
Wenn die id mit der 1 nicht vorhanden ist, wird kein Datensatz gändert. Gibt es dann irgendeine Fehlermeldung die ich mir ausgeben kann, so das ich sehen kann wenn kein Datensatz geändert wurde?
Die Anzahl der betroffenen Zeilen (affected Rows) ist in dem Fall 0. Das ist sie in beiden Fällen, also wenn kein Datensatz gefunden wurde und wenn der Datensatz zwar vorhanden aber der neu einzutragende Wert bereits enthalten ist. Wenn du das unterscheiden willst, musst du auf mysqli umsteigen und beim Verbinden das Flag CLIENT_FOUND_ROWS angeben. (Siehe MySQL-C-API-Funktion mysql_affected_rows())
Lo!
Hello Dedlfix,
mysql_query("UPDATE tabelle SET name='$name' WHERE id=1");
Wenn die id mit der 1 nicht vorhanden ist, wird kein Datensatz gändert. Gibt es dann irgendeine Fehlermeldung die ich mir ausgeben kann, so das ich sehen kann wenn kein Datensatz geändert wurde?Die Anzahl der betroffenen Zeilen (affected Rows) ist in dem Fall 0. Das ist sie in beiden Fällen, also wenn kein Datensatz gefunden wurde und wenn der Datensatz zwar vorhanden aber der neu einzutragende Wert bereits enthalten ist. Wenn du das unterscheiden willst, musst du auf mysqli umsteigen und beim Verbinden das Flag CLIENT_FOUND_ROWS angeben. (Siehe MySQL-C-API-Funktion mysql_affected_rows())
Wäre es ggf. zumutbar für Dich, das Szenario mal ausführlich zu beschreiben, sodass man das dann in die Tipps-Sammlung oder in die SQL-Reihe aufnehmen könnte?
#---
Ich selber versuche mich da gerade an der Darstellung der vertikalen Rechte sowie die Problematik von Mehrfachzugriffen ("Academic Locking", das mit der Viertelstunde...) in einem Datenbestand mit Hilfe von Stored Procedures und Sessions, da das in der letzten Zeit doch öfter mal kam. Muss nur noch die Vinzenzsche Darstellungsart für die SQL-Statements eine Weile üben. Die gefällt mir gut, weil sie leicht lesbar ist.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Wäre es ggf. zumutbar für Dich, das Szenario mal ausführlich zu beschreiben, sodass man das dann in die Tipps-Sammlung oder in die SQL-Reihe aufnehmen könnte?
Das Thema Affected Rows beziehungsweise der Unterschied zwischen gefundene und tatsächlich bearbeitete, ist mir zu klein für einen Artikel. Das kann als Nebensatz im angedachten großen Artikel zu MySQL (und PHP) stehen.
Lo!
Mahlzeit Sandra,
Wenn die id mit der 1 nicht vorhanden ist, wird kein Datensatz gändert. Gibt es dann irgendeine Fehlermeldung die ich mir ausgeben kann, so das ich sehen kann wenn kein Datensatz geändert wurde?
Einerseits gibt mysql_query() einen Rückgabewert zurück, woran Du schon einmal erkennen kannst, ob bei der Abfrage an sich ein Fehler aufgetreten ist.
Wenn es ein Fehler war, kannst Du diesen dann mit mysql_error() bzw. mysql_errno() abfragen - falls alles glatt lief, kannst Du die Anzahl der betroffenen Datensätze mittels mysql_affected_rows() ermitteln.
MfG,
EKKi
Hi EKKi,
also mal langsam für Anfänger ich mache mein Update.
Wenn ich dann mysql_affected_rows() aufrufe, ist bei einem erfolgten Update hier dann eine 1 drin????
Sandra
Mahlzeit Sandra,
Wenn ich dann mysql_affected_rows() aufrufe, ist bei einem erfolgten Update hier dann eine 1 drin????
"Drin" ist da nirgendwo etwas. Die Funktion sollte als Rückgabewert die Anzahl der geänderten Zeilen liefern (wie auch in der Dokumentation beschrieben - deswegen habe ich Dir diese extra verlinkt). Probier's doch einfach aus ...
MfG,
EKKi