ユーザー名の前後にスペースを手動で追加しているため、ユーザー名は存在しないように見えます:
$query = "SELECT * from User WHERE username=' ".$username." ' ";
^ ^
あるべき:
$query = "SELECT * from User WHERE username='".$username."' ";
プリペアドステートメントを使用すると、その問題と潜在的なSQLインジェクションの問題を一度に回避できます。
$query = "SELECT * from User WHERE username=?";
また、テーブル名と列名を一貫して使用するようにしてください:User
必ずしもuser
と同じではありません 。
注意 プレーンテキストのパスワードをデータベースに保存しないでください。