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
изменить на DEFAULT CURRENT_TIMESTAMP
в противном случае он будет autoupdate. От руководство:
в инструкции CREATE TABLE первый столбец метки времени может быть объявлен любым из следующих способов:
с предложениями CURRENT_TIMESTAMP по умолчанию и UPDATE CURRENT_TIMESTAMP столбец имеет текущую метку времени для своего значения по умолчанию и автоматически обновляется.
ни с предложениями DEFAULT ни ON UPDATE, это то же, что и по умолчанию CURRENT_TIMESTAMP при обновлении CURRENT_TIMESTAMP.
с предложением CURRENT_TIMESTAMP по умолчанию и предложением no ON UPDATE столбец имеет текущую метку времени для значения по умолчанию, но не обновляется автоматически.
выделено мной.
- оставьте формат как есть, но 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/)