mysql_db_query probleme mit update

Hallo zusammen,

ich habe in einer Tabelle 2 Felder als timestemp…
wenn ich via PHP dieses sende:

$query = „UPDATE my_table SET time = ‚$time_now‘ WHERE ID = $id“;
$result=mysql_db_query(„forum“,$query);

dann werden beide Felder geändert…

ist das ein bug, oder hab ich was übersehen?

Danke
Tom

Hallo Tom,

ich habe in einer Tabelle 2 Felder als timestemp…
wenn ich via PHP dieses sende:

$query = „UPDATE my_table SET time = ‚$time_now‘ WHERE ID =
$id“;
$result=mysql_db_query(„forum“,$query);

dann werden beide Felder geändert…

ist das ein bug, oder hab ich was übersehen?

Das ist kein Bug, das ist ein Feature! Felder vom Typ Timestamp
werden automatisch auf Datum/Uhrzeit der letzten Änderung des
Datensatzes gesetzt (Einzige Ausnahme: Du setzt explizit den
Wert).

Vermutlich möchtest Du in dem Feld einen Datums-/Zeitwert ablegen
und nicht das Datum der letzen Änderung. Die ‚richtigen‘ Feldtypen
wären Date, Time oder DateTime.

Wie immer gibts weiter Infos bei mysql.com:

http://dev.mysql.com/doc/mysql/de/DATETIME.html

Viele Grüße
Thomas

Hi Thomas,

ganau das wars… ich habe kurz mal an diese Möglichkeit gedacht, aber warum wenn ich den Kommand von Hand in die Datenbank eingebe habe ich den Effect nicht??

Danke
Tom

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

von Hand?
oder vielleicht doch eher von phpmyadmin? :wink:
ist nämlich ein grosser Unterschied, wie die Query ausgeführt wird…

nein, von der console aus, mit
mysql -u user -p
use my_db
update…;

dann hatte ich diesen efect nicht, das ist komisch

Tom

oder vielleicht doch eher von phpmyadmin? :wink:
ist nämlich ein grosser Unterschied, wie die Query ausgeführt
wird…

Ergänzung: Von Hand oder automatisch
Er ist egal, ob der Befehl per Hand, phpMyAdmin, cmd, Shell-Script usw.
ausgeführt wird!

Zitat aus dem mySQL-Handbuch:
„The TIMESTAMP column type provides a type that you can use to
automatically mark INSERT or UPDATE operations with the current
date and time. If you have multiple TIMESTAMP columns, only the
first one is updated automatically.“
(aus dem Abschnitt „6.2.2.2 The DATETIME, DATE, and TIMESTAMP Types“)

Im Zweifel hilft also immer ein Blick ins Handbuch
um die restlichen Klarheiten zu beseitigen :wink:

Trotzdem der Tipp: Wenn kein auto-update gewünscht wird lieber
TIME, DATE oder DATETIME verwenden.

Schönen Abend noch,
Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

das ist jetzt schon alles klar, nur habe ich auf der homepage ein echo $query; gemacht, die Ausgabe habe ich dann kopiert und direkt in die mysql Datenbank eingefügt (natürlich habe ich die Zeit verändert und ein ; dahinter gemacht

-)…

dort hatte ich nur die Änderung vom ersten timestamp, via PHP sind aber beide geändert worden… das kann ich mir nicht erklären

Tom

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Servus,

dort hatte ich nur die Änderung vom ersten timestamp, via PHP
sind aber beide geändert worden… das kann ich mir nicht
erklären

Genau so ist das auch definiert. Hast du mehrere Timestamp-Felder in einer Tabelle, wird nur das erste automatisch aktualisiert:
http://dev.mysql.com/doc/mysql/de/DATETIME.html

Schreibst du zum Beispiel:

UPDATE tabelle SET stringFeld='xyz' WHERE id=12

dann wird nur das erste Timestamo-Feld auf den aktuellen Wert gesetzt.

Möchtest du die anderen ebenfalls auf den aktuelen Zeitstempel setzen, musst du dies explizit erledigen:

UPDATE tabelle SET stringFeld='xyz',timestamp2=NOW() WHERE id=12

Willst du bei einem zum Beispiel Update auch den ersten Timestamp nicht aktualisieren, geht das folgendermaßen:

UPDATE tabelle SET stringFeld='xyz',timestamp1=timestamp1 WHERE id=12

gruss Markus