Соглашусь с предыдущим комментатором, код ужасный. Но главная проблема здесь не в коде, а в голове.
Все программирование построено на такой штуке, как логика. И если не умеешь мыслить логически - причем на самом элементарном, бытовом уровне - то в программировании точно делать нечего.
Зачем спрашивать, как хэшировать пароль, если у вас в коде это хэширование уже есть? Вот же оно -
$password = password_hash($password, PASSWORD_DEFAULT);
Где логика?
Зачем сравнивать хэши паролей, если вы хотите сравнить сами введенные пароли? Где логика? Хэши никогда не совпадут.
Зачем писать, что пароль "Заносится в базу данных без хэширования", если при текущем коде ничего никуда вообще не заносится, потому что не проходит сравнение хэшей. Где логика?
А если эту дурацкую проверку убрать, или поменять на сравнение самих паролей, то занесется именно хэш,
можно убедиться
Но главная тут проблема - это конечно SQL инъекция.
Какой вообще смысл делать регистрацию, авторизацию - если кто угодно сможет зайти вообще без пароля под кем угодно? Где логика?
Надо обязательно научиться выполнять все запросы с переменными только через подготовленные выражения. А потом уже браться за регистрацию, пагинацию, и что угодно. Сначала учимся класть кирпичи, а потом только строим дом. А не наоброт.
Отдельное замечание по структуре.
Каждая функция должна выполнять только одну операцию.
Функция регистрации не должна заниматься проверкой входящих данных.
То, что она не напрямую обращается к массиву POST - это очень хорошо. Это вы правильно сделали.
Но все проверки из нее надо тоже убрать. А делать их перед вызовом.
И тогда не придется возвращать никакие цыферки.