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