1) Самое простое из возможных решений:
UPDATE users SET Authenticated = 1, Authenticated_At = NOW() WHERE ID = {$id};
2) Другим решением является установка значения DEFAULT
для отметки времени. Это реализовано в определении таблицы, например:
CREATE TABLE `users` (
`ID` int(11) NOT NULL,
`Authenticated` tinyint(1) NOT NULL DEFAULT 0,
`Name` varchar(20) NOT NULL,
`Surname` varchar(20) NOT NULL,
`Username` varchar(20) NOT NULL,
`Email` varchar(255) NOT NULL,
`Password` varchar(70) NOT NULL,
`Created_At` datetime DEFAULT current_timestamp(),
`Authenticated_At` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
С документация :
Автообновляемый столбец автоматически обновляется до текущей отметки времени, когда значение любого другого столбца в строке изменяется от его текущего значения. Автообновляемый столбец остается неизменным, если для всех остальных столбцов установлены текущие значения. Чтобы предотвратить автоматическое обновление столбца при изменении других столбцов, явно установите для него текущее значение. Чтобы обновить автоматически обновляемый столбец, даже если другие столбцы не изменяются, явно установите для него значение, которое должно иметь (например, установите для него CURRENT_TIMESTAMP).
Чтобы метка времени Authenticated_At
автоматически обновлялась при каждом обновлении записи (без обновления Created_At
), необходимо:
UPDATE users SET Authenticated = 1, Created_At = Created_At WHERE ID = {$id};
3) Как мудро прокомментировал @Raymond Nijland, лучшее решение - определить столбец метки времени, который будет обновляться только при UPDATE
операциях, например:
`Authenticated_At` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP