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 OK, 1 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).
CREATE
DELETE
INSERT
REPLACE
UPDATE
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 OK, 0 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 OK, 3 rows affected (0.03 sec)
Rows matched: 3 Changed: 3 Warnings: 0
Wenn man dann dieselbe Abfrage noch mal ausführt, so sieht das Ergebnis wie folgt aus.
Query OK, 0 rows affected (0.03 sec)
Rows matched: 3 Changed: 0 Warnings: 0
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