Задавать вопрос "почему мой код не работает" бесполезно.
Просто потому что код может не работать примерно по миллиону причин. Запаришься все перечислять.
Причём эти причины к самому коду могут не иметь никакого отношения.
Всегда надо задавать вопрос "как я могу узнать, почему код не работает".
Чтобы узнать, почему РНР код не работает, надо прочитать сообщение об ошибке РНР. В данном случае мы его не видим, а видим только сообщение веб-сервера о том, что РНР завершился с ошибкой.
Чтобы увидеть ошибку РНР, надо сделать две вещи:
1. Убедиться, что РНР генерирует сообщения об ошибках. Для этого во-первых, всегда должен стоять максимальный уровень генерации ошибок, error_reporting(E_ALL);
, и во-вторых, программист не должен сам себе стрелять в ногу, насильно подавляя сообщения об ошибках. И никогда не использовать оператор подавления ошибок, @.
2. На время разработки поставить режим вывода ошибок на экран, ini_set('display_errors', 1);
. На боевом сервере, соответственно, этот режим должен быть выключен, а логирование наоборот - включено.
И только после получения сообщения об ошибке можно уже приходить на Хабр с вопросом. Но сначала предварительно погуглить, потому что все вопросы уже задавали по миллиону раз.
В данном случае вероятной причиной может быть нестандартный порт mysql. Но опять же, гадать нет смысла, надо сначала увидеть сообщение об ошибке.
Отдельно отмечу, что в таком виде регистрацию делать бессмысленно, тут сплошная SQL инъекция, то есть кто угодно сможет узнать чужой пароль, залогиниться под чужим именем или вообще зайти без пароля. Все SQL запросы, в которых участвуют переменные, в обязательном порядке должны выполняться через подготовленные выражения, с заменой переменных на знаки подстановки.
Кроме того, пароль в обязательном порядке должен стойко хэшироваться, функцией password_hash()