PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Update nur ausführen wenn die gespeicherten Daten nicht die gleichen sind


jze
19.02.2007, 23:15
Hallo,
mir ist durch zufall etwas aufgefallen das mir gefällt aber ich weiß nicht wie ich das geschaft habe. Vielleicht kennt von Euch jemand die entsprechenden Einstellung.Ich laß über PHP Daten in verschiedene Tabellen eintragen, z.B. so:
Nur ein Auszug aus dem Quelltext)

$sSQL = "UPDATE `test_cms_cat1` SET `Categorie` = 'Test Test', `_Issuer` = 'Peter' WHERE ID =9;";
$result = mysql_db_query($db, $sSQL);
$answer = mysql_affected_rows();

Das funktioniert ganz gut und ich bekomme in beiden Variablen eine 1 zurück - paßt. Wenn ich jetzt den gleichen SQL String nochmal sende (somit sind die Daten im String und in der Tabelle gleich) kommt bei $result eine 1 und bei $answer eine 0 zurück. Ich habe in der Tabelle ein Feld, daß beim Update einen Timestamp aufnimmt, daran sehe ich, daß kein Update durchgeführt wurde.
Warum?????
Kann man das irgentwo einstellen, ist das eine php eigenheit?
Würde mich freuen wenn jemand mehr darüber weiß.
Danke

ThBodi
22.02.2007, 16:19
Zitat von php.net (http://www.php.net/manual/de/function.mysql-affected-rows.php)...
Anmerkung: 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.
...

Zitat von dev.mysql.com (http://dev.mysql.com/doc/refman/5.1/de/update.html)...
UPDATE gibt die Anzahl der tatsächlich geänderten Datensätze zurück.
...
----------------------------------
...Ich habe in der Tabelle ein Feld, daß beim Update einen Timestamp aufnimmt, ...
Wie meinst Du das? Bei Deinem Beispiel wird doch gar kein Timestamp gesetzt? Wenn Du Dein SQL-Statement so abändern würdest:
$sSQL = "UPDATE `test_cms_cat1` SET `Categorie` = 'Test Test', `_Issuer` = 'Peter', timestamp=NOW() WHERE ID =9;";
würde die Aktualisierung vermutlich jedesmal stattfinden.

jze
22.02.2007, 17:34
Erstmal danke für die Hinweise.:)
Ein Feld mit Timestampe gib es und es ist so eingestellt, daß es sich automatisch setzt wenn der Datensatz ein Update erfährt. Somit muß ich das nicht in den SQL String mit reintun, gleichzeit geht der Update nicht wenn sich nichts an den Inhalten geändert hat.
Nachdem ich das jetzt weiß kann man damit interessante Varianten schaffen. Muß ich mal noch etwas genauer Testen, ich habe nähmlich auch eine Aufgabe bei dem das Update gepüft werden müßte ob es die gleichen Daten beinhaltet wie schon vorhanden und dann nicht ausführt wenn die Daten gleich sind.