Não, consultas preparadas (quando usadas corretamente) garantirão que os dados sejam escapados adequadamente para consultas seguras. Você está meio que usando-os corretamente, só precisa mudar uma coisinha. Porque você está usando o '?' placeholder, é melhor passar parâmetros pelo método execute.
$sql->execute(array($consulta));
Apenas tome cuidado se você estiver enviando isso para sua página, a sanitização do banco de dados não significa que será seguro para exibição em HTML, então execute htmlspecialchars() nele também.