Я бы сказал, что лучший способ сделать это - создать отдельную таблицу, состоящую из идентификатора пользователя, хэша пароля и метки времени.Вы вставите сюда при смене пароля, отметка времени будет иметь текущее время при вставке.
CREATE TABLE `oldpasswords` (
`userid` int(11) NOT NULL,
`password` varchar(255) NOT NULL default '0',
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`userid`,`password`, `timestamp`)
);
Затем вы можете запросить эту таблицу, когда пользователь попытается изменить свой пароль:
SELECT count(*) FROM oldpasswords where userid = :p_userid and
password = :p_pass and timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);
если счет> 0, они использовали его в течение последних 3 месяцев.Если нет, вставьте ее в эту таблицу и измените также запись основной таблицы пользователей.
Возможно, вы также захотите периодически очищать эту таблицу.
DELETE FROM oldpasswords WHERE timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);
удалит все, что старше3 месяца, так как нам это больше не нужно.