PDO - Błąd krytyczny: wywołanie funkcji składowej fetch () na nieobiektowym [duplikacie]

To pytanie ma już tutaj odpowiedź:

PDO: Wywołanie funkcji członka fetch () na obiekcie innym niż obiekt? [duplikować] 4 odpowiedzi

jeśli spróbuję uruchomić następujący kod PHP, otrzymam

Wywołanie funkcji składowej fetch () na obiekcie innym niż obiekt.

Wiesz dlaczego? Używam tego samego kodu w innej witrynie, gdzie działa dobrze.

<?php
$username = ($_GET ['user']);
try {
    $dbh = new PDO("mysql:host=localhost;dbname=***", '***', '***');    
} catch (PDOException $e) {
    echo $e->getMessage();
}
$sth = $dbh->query( "SELECT user, captcha 
    FROM xf_captcha WHERE user='$username'" );
print_r($sth->fetch());
?>

Edytować:

$sth = $dbh->query( "SELECT username, user_state, last_activity, alerts_unread, conversations_unread, message_count 
    FROM xf_user WHERE username='$user'" );
$row = $sth->fetch();

Edit2:

Czy to wygląda bezpiecznie, czy powinienem zrobić więcej?

<?php
$username = ($_GET ['user']);
try {
    $dbh = new PDO("mysql:host=localhost;dbname=***", '***', '***');
} catch (PDOException $e) {
    echo $e->getMessage();
}
$sth = $dbh->prepare("SELECT username, captcha, timestamp 
    FROM xf_captcha 
    WHERE username = :username", array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':username' => $username));
print_r($sth->fetch());
?>

questionAnswers(3)

yourAnswerToTheQuestion