This is wrong:
while($row = mysql_fetch_assoc($query));
A semi-colon at the end of a branch is true once and only once, and with loops its the last item of the collection (you can see it in a foreach for example). In a while, the control condition is false or null, so doing that above will assign null to $row regardless of how many records you have.
Either remove the while loop (assuming id is PK you'll only have one record anyway) or remove the semi-colon.
So never use a semi-colon on a branch, it will definitely come back again in the future, but now you know to look for it. Since its true once and only once,
if (false); is considered true, so if you see an obvious false condition evaluating true, check that it has no semi-colon at the end of the branch.