отметка времени php mysql - PullRequest
6 голосов
/ 10 июня 2010

Мне нужно отследить дату и время создания пользователя в моей базе данных mysql.У меня есть столбец с именем «создан» и тип данных как TIMESTAMP.

Проблема в том, что когда пользователь меняет свой пароль или другую информацию, значение TIMESTAMP изменяется.Как я могу установить это, чтобы не менять ????

Ответы [ 9 ]

7 голосов
/ 10 июня 2010

Звучит так, как будто у вас не правильно настроен столбец отметки времени:

Ознакомьтесь с направляющей :

*

  Auto-initialization and auto-update:

  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

*

  Auto-initialization only:

  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

*

  Auto-update only:

  ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

*

  Neither:

  ts TIMESTAMP DEFAULT 0
5 голосов
/ 10 июня 2010

Вы можете просто захотеть установить для его предложения по умолчанию значение CURRENT_TIMESTAMP (как @ Пометить и @ dcp , отмеченные в других ответах):

CREATE TABLE your_table (
   ...
   `created_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Контрольный пример:

CREATE TABLE tb (`a` int, `c` TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.04 sec)

INSERT INTO tb (a) VALUES (1);
Query OK, 1 row affected (0.01 sec)

SELECT * FROM tb;
+------+---------------------+
| a    | c                   |
+------+---------------------+
|    1 | 2010-06-09 23:31:16 |
+------+---------------------+
1 row in set (0.00 sec)

UPDATE tb SET a = 5;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

SELECT * FROM tb;
+------+---------------------+
| a    | c                   |
+------+---------------------+
|    5 | 2010-06-09 23:31:16 |
+------+---------------------+
1 row in set (0.00 sec)

РЕДАКТИРОВАТЬ:

В своем исходном ответе я предложил использовать столбец DATETIME с предложением DEFAULT, установленным вCURRENT_TIMESTAMP.Однако это возможно только при использовании типа данных TIMESTAMP, как указано в документации :

Предложение DEFAULT value в спецификации типа данных указывает значение по умолчанию длястолбец.За одним исключением, значение по умолчанию должно быть константой;это не может быть функция или выражение.Это означает, например, что вы не можете установить значение по умолчанию для столбца даты равным значению функции, такой как NOW() или CURRENT_DATE.Исключением является то, что вы можете указать CURRENT_TIMESTAMP в качестве значения по умолчанию для столбца TIMESTAMP.

3 голосов
/ 10 июня 2010

Измените его на DEFAULT CURRENT_TIMESTAMP, иначе оно будет автоматически обновлено.Из руководства :

В операторе CREATE TABLE первый столбец TIMESTAMP может быть объявлен любым из следующих способов:

Как с DEFAULT CURRENT_TIMESTAMP, так и сВ предложениях UPDATE CURRENT_TIMESTAMP столбец имеет текущую временную метку для своего значения по умолчанию и автоматически обновляется.

Без предложений DEFAULT и ON UPDATE он совпадает с DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.

С предложением DEFAULT CURRENT_TIMESTAMP и без предложения ON UPDATE столбец имеет текущую временную метку для своего значения по умолчанию, но не обновляется автоматически.

Акцент мой.

3 голосов
/ 10 июня 2010

Использовать столбец даты и времени. Автоматическое обновление метки времени.

0 голосов
/ 29 декабря 2011

Это немного грязно в вашем случае, но вы можете временно отключить автоматическое обновление, выполнив:

UPDATE woot SET password=<value_to_set>, timestamp_colum_name=timestamp_colum_name;

(Найдено там: http://www.xarg.org/2010/06/disable-on-update-current-timestamp-in-mysql/)

0 голосов
/ 10 июня 2010

В атрибутах отключите "при обновлении CURRENT_TIMESTAMP".

0 голосов
/ 10 июня 2010

Когда вы создаете таблицу, вы должны пропустить ON UPDATE

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

должно быть

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

ссылка

0 голосов
/ 10 июня 2010
  • Оставьте формат как есть, но при вставке вы правильно форматируете вставленную строку с помощью date().
  • Затем, когда пользователь изменяет свою информацию, он должен быть updating.
0 голосов
/ 10 июня 2010

Как сделать дату / время?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...