A ideia das instruções preparadas é que você não concatena variáveis, em vez disso, vincula os parâmetros. A diferença é que a variável nunca é inserida no SQL, em vez disso, o mecanismo do MySQL lida com a variável separadamente, o que não deixa possibilidade de injeção de SQL. Isso também tem o bônus adicional de que não é necessário nenhum escape ou pré-processamento da variável.
$query = $db->prepare("SELECT password FROM login WHERE username = :username");
$query->execute(array(':username' => $username));