sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skriver parameteriserad sql-fråga för att förhindra SQL-injektion?

Jag är inte en Knex.js-användare, men om jag tittar på dokumenten verkar det som om Knex användning av JavaScript-objektsyntax för att definiera predikat är hur den uppnår parameterisering.

Men eftersom du använder inbyggda funktioner måste du använda whereRaw .

Titta på dokumenten ( http://knexjs.org/#Builder-whereRaw ) och ( http://knexjs.org/#Raw-Bindings ) Jag tror att du vill göra det här:

.whereRaw('question LIKE :term OR note LIKE :term OR user_name LIKE :term', { term: '%' + term + '%' ] } )

Knex har ingen orWhereRaw , så du bör använda långhandsversionen om du logiskt vill separera predikaten:

term = '%' + term + '%';

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

Notera ? är för positionsparametrar och :term är för namngivna parametrar.



  1. Hur man rangordnar rader inom en partition i SQL

  2. Halloweenproblemet – del 1

  3. Postgres Skapa vy med posttypsfunktion

  4. Är det möjligt att lagra kommatecken istället för poäng för decimalfält i en PostgreSQL-databas?