Hauptmenü

Untermenü

PHP/MySQL - PHP/MySQL Grundlagen - Ändern

1. Die Abschnitte

2. Der feine Unterschied

Im Gegensatz zu SELECT oder SHOW läuft die Sache bei jedweder Änderung der Inhalte anders. Gebt mal einfach folgende Anweisung im MySQL-Client ein: DELETE FROM hersteller WHERE id = 4;. Und was bekommt ihr als Antwort? Ein läppisches


Query OK1 row affected (0.00 sec)

MySQL liefert also nur drei Hinweise. Der erste besagt, dass die Abfrage erfolgreich ausgeführt wurde, der zweite sagt, wie viele Datensätze betroffen waren und der dritte zeigt die Verarbeitungszeit. Allerdings ist der für uns erst mal unerheblich. Das hat natürlich auch Auswirkungen auf das Zusammenspiel mit PHP. Und zwar bei folgenden Befehlen (auch wenn die Liste nicht ganz vollständig ist).

3. Der Rückgabewert

...hängt einzig und allein von der Abfrage ab. Wenn wir also mit $ref = mysql_query ($query) arbeiten, so hat $ref entweder den Wert true, bzw. ein boolsches 1, oder gar nichts. Auf letzteren Fall gehe ich gleich ein. Kommen wir also zurück zum true, das dem Query OK entspricht. Das entspricht zwar nicht ganz den Tatsachen, reicht aber zum grundsätzlichen Verständnis wohl aus.

Was genau bedeutet das nun? Eigentlich nur, dass die Abfrage korrekt ausgeführt worden ist. Sie sagt aber nicht mehr aus! Will man den zweiten Teil der Meldung zu Gesicht bekommen, so setzt man direkt nach dem $ref = mysql_query ($query) ein $aff = mysql_affected_rows(); und hat dann die Anzahl der betroffenen Datensätze. Will man also zum Beispiel einen Datensatz mit der ID 20 löschen und die nicht existiert, so kommt als Meldung ein


Query OK0 row affected (0.00 sec)

Und das wäre dann auch das Ergebnis von mysql_affected_rows. Man sollte sich in diesem Fall also ein paar Gedanken machen, wenn man einen Datensatz löschen will, der nicht existiert.

4. UPDATE

Hier gibt es eine Feinheit. Bei diesem Statement bekommt ihr neben der Anzahl der geänderten Datensätze zusätzlich einen Hinweis auf die Menge der Datensätze, die zur Bedingung passen. Dazu nehmen wir ein UPDATE produkt SET preis = 5.00 where id > 2;.


Query OK3 rows affected (0.03 sec)
Rows matched3  Changed3  Warnings0

Wenn man dann dieselbe Abfrage noch mal ausführt, so sieht das Ergebnis wie folgt aus.


Query OK0 rows affected (0.03 sec)
Rows matched3  Changed0  Warnings0

Das bedeutet, dass drei Datensätze der Bedingung entsprechen, aber nichts geändert wurde. Informationen dazu bekommt ihr in PHP mittels der Funktion mysql_info. Auch wenn ich ehrlich gesagt damit noch nie zu tun hatte. Ja, solange nicht, bis ich mich damit dann doch mal befasst habe. Und sage und schreibe einen Tag später stand ich dann vor einem Problem, dass ich mit mysql_info lösen konnte.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt