I still claim that the phone number is treated as a number (int/whatever) at some point, instead of remaining a string all the way from user to DB, and then all the way from DB and back to user again.
Using a BIGINT in the DB is definitely proving my point, as that is indeed treating data as a number instead of a string. Change it back to VARCHAR, then go over the rest of the code and make sure you stick to strings all the way.