zawsze możesz użyć:
bin2hex(random_bytes(32));
A później szukasz:
SELECT * FROM user WHERE activation_hash = :hash;
i jeśli znajdzie rekord, to robisz update comfirmed na true, inaczej zwracasz błąd.
Jeszcze można pomyśleć o dodaniu timestampa, by sprawdzić, czy token jest dalej aktualny.