sql >> Database >  >> RDS >> PostgreSQL

Hoe schrijf je een SQL-query met parameters om SQL-injectie te voorkomen?

Ik ben geen Knex.js-gebruiker, maar als ik naar de documenten kijk, lijkt het erop dat Knex's gebruik van JavaScript-objectsyntaxis om predikaten te definiëren, is hoe het parametrisering bereikt.

Omdat u echter ingebouwde functies gebruikt, moet u whereRaw . gebruiken .

Kijkend naar de documenten ( http://knexjs.org/#Builder-whereRaw ) en ( http://knexjs.org/#Raw-Bindings ) Ik denk dat je dit wilt doen:

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

Knex heeft geen orWhereRaw , dus je moet de lange versie gebruiken als je de predikaten logisch wilt scheiden:

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

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

Opmerking ? is voor positionele parameters, en :term is voor benoemde parameters.



  1. Converteer SQLITE SQL-dumpbestand naar POSTGRESQL

  2. Recursieve opmerkingen implementeren in PHP/MySQL

  3. Vermijd deze 4 veelvoorkomende DBA-fouten

  4. Doctrine merge:DateTime-veld altijd bijgewerkt