Je sais pas si ça a d'importance, mais au lieu de rechercher un utilisateur avec le pseudo entré à l'inscription, je mettrais la colonne "username" à clée unique dans la BDD et j'essaierais directement d'écrire en attrapant l'erreur avec un try/else
genre ça:
$password = sha1($_POST['password']);
$req = $bdd->prepare('INSERT INTO users(user_name, user_pass, user_email, user_date, user_level, user_mod, user_banned)
VALUES(:username, :password, :email, NOW(), 0, 0, 0)');
try
{
$req->execute(array(
'username'=>$_POST['username'],
'password'=>$password,
'email'=>$_POST['email']
));
//print_r($req->errorInfo()); //for debug purposes
$req->errorinfo();
echo '<p>Successfully registered. You can now <a href="signin.php">sign in</a>.</p>';
}
catch (PDOException $e) //if exception
{
if ($e->errorInfo[1] == 1062) //if duplicate error is returned
{
//print_r($req->errorInfo()); //for debug purposes
echo '<p>It seems the username you chose is already taken, please go back and enter another one.</p>';
}
else
{
//print_r($req->errorInfo()); //for debug purposes
echo '<p>An error happened... Try again, if it doesn\'t work, contact the webmaster.</p>';
}
}
}
Tirée de mon propre projet, oui, je met mes notes en anglais 
Après, je débute moi même, donc je sais pas si c'est vraiment mieux.