Improving my user class I am still uncomfortable and new with working with classes.

I have made a User class that will return stuff about the user.

&lt;?

class User {
    public function age($id) {
        $birth = new DateTime("$id");
        $now = new DateTime();
        $age = $now-&gt;diff($birth)-&gt;format("%y");
        return $age;
    }
    public function avatar($id) {
        $connect = Database::factory();

        $id = $id;
        $getQuery = $connect-&gt;prepare("SELECT photo_thumb FROM users_profile WHERE uID =:id");
        $getQuery-&gt;bindValue(":id", $id);
        $getQuery-&gt;execute();
        $show = $getQuery-&gt;fetch();
        $photoName = ((empty($show['photo_thumb'])) ? '' : $show['photo_thumb']);
        return $photoName;
    }
    public function fullname($id, $full = 1) {
        $connect = Database::factory();
        $query = $connect-&gt;prepare("SELECT firstname, lastname FROM users WHERE id =:id");
        $query-&gt;bindValue(":id", $id);
        $query-&gt;execute();
        $row = $query-&gt;fetch();

        $full_name = $row["firstname"]." ".$row["lastname"];
        return $full_name;
    }
    public function firstname($id) {
        $connect = Database::factory();
        $query = $connect-&gt;prepare("SELECT firstname, lastname FROM users WHERE id = '$id'");
        $query-&gt;execute();
        $row = $query-&gt;fetch();
        $firstname = $row["firstname"];
        return $firstname;
    }
    public function sex($id) {
        $connect = Database::factory();

        $query = $connect-&gt;prepare("SELECT sex FROM users WHERE id=:id");
        $query-&gt;bindValue(":id", $id);
        $query-&gt;execute();
        $row = $query-&gt;fetch();
        return $row["sex"];
    }
}


If you look through it fast, you will notice how everything is like the same, apart from its grabbing another column name and sometimes from another table.

Otherwise it just execute, fetches and returns.

I wonder if I can improve this code any way, so it looks cleaner and not so copy+paste like now..
In short : its an extremely bad piece of code.

Here is a list or "whys":


you are mixing data access with logic ( sql queries should be handled by different object )
you are using global state for DB access 
there is some mystical parameter $full in full_name() method
all the methods are getters
the SQL queries happen each time you use a getter
parameter $id means nothing ( is it a string , a number , some other object ? )


Basically what you have there are five standalone procedures wrapped up in an a class just for show.