Dlaczego tak
Funkcja password_hash() dodaje do skrótu losową sól, więc to samo hasło za każdym razem daje inny skrót. Dlatego porównanie nowo obliczonego skrótu z zapisanym nigdy nie będzie prawdziwe, a do sprawdzenia służy password_verify(), która odczytuje sól i algorytm z zapisanego skrótu. Funkcja md5() daje zupełnie inny skrót, a porównanie z jawnym hasłem nie zadziała, bo w bazie nie ma jawnego hasła.