Что же, в этом случае у Вас в любом случае будет 2 действия от пользователя:
1) запрос на восстановление, при этом пользователю выдаётся одноразовый код, который записывается в поле `code`.
2) после подтверждения (email/POST/etc.): необходимо заменить текущий пароль пользователя на новый и оповестить пользователя.
Генерацию пароля можно реализовать на Ваше усмотрение в любом месте.
В этом случае, я бы предложил добавить время генерации кода (`code`) и переписать запрос на следующий:
UPDATE `users` SET `password` = `temp_password`, `code` = NULL WHERE `code` = :code
и запустить, выводит 6 элементов.