Lembre-se de que as injeções de SQL são causadas por strings hostis interpretadas como comandos, não por comandos de bloqueio. Você tem certeza de que está recebendo a string original de volta, não uma versão com string?
Por exemplo, há uma grande diferença entre esses dois:
"test"
e "'test'"
. Geralmente, apenas caracteres prejudiciais são escapados, o restante é deixado como está.
É melhor evitar o uso do driver de baixo nível. Experimente e use uma biblioteca como Sequelize para fornecer alguma abstração e mais suporte. Esse módulo suporta instruções de espaço reservado que geralmente tornam o escape um não-problema, ele é tratado automaticamente.
Consulte a seção sobre consultas brutas com substituições onde você tem a capacidade de fazer isso:
sequelize.query('SELECT * FROM projects WHERE status = ?',
{ replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
console.log(projects)
})
Não há risco de vazamento de dados do usuário porque você os forneceu como um valor explícito que é tratado corretamente, não como uma string embutida na consulta.