Thomas Luethi: PHP/mysql veränderte werte checken?

Beitrag lesen

Hallo,

In eine andere Tabelle soll aber der Edit protokolliert werden.

Du sprichst eine komische Sprache.
"Der Edit" existiert in meinem Wortschatz leider nicht.
Wie heissen Deine Tabellen und ihre Felder (Spaltennamen)?
Wieviele Felder willst Du in der betreffenden Tabelle aendern?

Falls ich zusätzlich auch protokollieren möchte, welche Felder beim jeweiligen Edit geändert wurden, muß ich dazu bei jedem Feld Originalinhalt mit dem Inhalt nach Versenden des Formulars vergleichen oder gibts da eine einfachere Möglichkeit?

Wenn Du schauen willst, ob eine UPDATE-Query ueberhaupt
eine oder mehrere Zeilen effektiv veraendert hat, kannst
Du das mit mysql_affected_rows() feststellen.

http://www.mysql.com/doc/en/mysql_affected_rows.html
"Zero indicates that no records where updated for
an UPDATE statement, [...]"

http://www.php.net/manual/de/function.mysql-affected-rows.php
"Benutzen Sie UPDATE wird MySQL keine Spalten aktualisieren,
bei denen der neue dem alten Wert entpspricht.
Das kann dazu führen, dass mysql_affected_rows() nicht die tatsächliche Anzahl der betroffenen Zeilen liefert, sondern
nur die, die wörtlich durch die Anfrage betroffen sind."

=> Das bedeutet eben, dass wenn die Werte sind wie vorher,
mysql_affected_rows() als Resultat 0 (Null) zurueckgeben wird.

--

Oder Du koennest auch gleich das Resultat von UPDATE auswerten:
http://www.mysql.com/doc/en/UPDATE.html
"UPDATE returns the number of rows that were actually changed."

--

Wenn das beides nicht den gewuenschten Effekt zeigt,
d.h. wenn auch bei gleichbleibenden Werten angegeben
wird, es haetten sich gewisse Zeilen veraendert,
dann kannst Du es mit einer TIMESTAMP-Spalte versuchen.
Diese wird wirklich nur dann aktualisiert, wenn effektiv
ein neuer Wert geschrieben wird:
http://www.mysql.com/doc/en/DATETIME.html
"Note that an UPDATE that sets a column
to the value it already has will not cause
the TIMESTAMP column to be updated, because
if you set a column to its current value,
MySQL ignores the update for efficiency."

Du koenntest also vor und nach dem Update die TIMESTAMPs
auslesen und diese vergleichen, um festzustellen,
ob ueberhaupt eine Aenderung stattgefunden hat.

HTH, Gruesse,

Thomas