Используя такой код
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
вы должны быть уверены, что первые три поля таблицы $usertable должны быть name, email и preference, остальные должны иметь значения по умолчанию. Это во-первых. Во-вторых - плохая практика писать запросы со вставкой переменных прямо в строку запроса (почитайте про SQL-инъекции). В третьих, по всей видимости - вместо
$email = md5($params['password'])
ожидается
$password = md5($params['password'])
. В четвертых - как пароль может сохранится, если вы его не вставляете в базу вообще?