PHP mysql метка времени

Мне нужно отслеживать дату и время пользователь был создан в моей базе данных MySQL. У меня есть столбец под названием "created" и тип данных как отметка времени.

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

9 ответов


вы можете просто установить его предложение по умолчанию в 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)

EDIT:

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

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


похоже, у вас нет столбца timestamp настроены правильно:

Проверьте руководство:

*

  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

используйте столбец datetime. Метка авто-обновления.


изменить на DEFAULT CURRENT_TIMESTAMP в противном случае он будет autoupdate. От руководство:

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

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

ни с предложениями DEFAULT ни ON UPDATE, это то же, что и по умолчанию CURRENT_TIMESTAMP при обновлении CURRENT_TIMESTAMP.

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

выделено мной.


сделать это DateTime?


  • оставьте формат как есть, но whe вы вставляете formate вставленную строку правильно с date().
  • тогда нужно быть updating когда пользователь изменяет свои данные.

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

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

должно быть

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

ссылке


под атрибутами, отключить "на ТЕКУЩАЯ_ОТМЕТКА_ВРЕМЕНИ обновление".


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

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/)