PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como escrever uma consulta sql parametrizada para evitar a injeção de SQL?


Eu não sou um usuário do Knex.js, mas olhando para os documentos, parece que o uso da sintaxe de objeto JavaScript do Knex para definir predicados é como ele alcança a parametrização.

No entanto, como você está usando funções internas, você precisa usar whereRaw .

Olhando para os documentos ( http://knexjs.org/#Builder-whereRaw ) e ( http://knexjs.org/#Raw-Bindings ) Acho que você quer fazer isso:
.whereRaw('question LIKE :term OR note LIKE :term OR user_name LIKE :term', { term: '%' + term + '%' ] } )

Knex não tem um orWhereRaw , então você deve usar a versão longa se quiser separar logicamente os predicados:
term = '%' + term + '%';

.orWhere( knex.raw( 'question  LIKE ?', [ term ] ) )
.orWhere( knex.raw( 'note      LIKE ?', [ term ] ) )
.orWhere( knex.raw( 'user_name LIKE ?', [ term ] ) )

Nota ? é para parâmetros posicionais e :term é para parâmetros nomeados.