PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment écrire une requête SQL paramétrée pour empêcher l'injection SQL ?

Je ne suis pas un utilisateur de Knex.js, mais en regardant la documentation, il semble que l'utilisation par Knex de la syntaxe d'objet JavaScript pour définir les prédicats est la façon dont il réalise le paramétrage.

Cependant, comme vous utilisez des fonctions intégrées, vous devez utiliser whereRaw .

En regardant les docs ( http://knexjs.org/#Builder-whereRaw ) et ( http://knexjs.org/#Raw-Bindings ) Je pense que vous voulez faire ceci :

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

Knex n'a pas de orWhereRaw , vous devez donc utiliser la version longue si vous souhaitez séparer logiquement les prédicats :

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

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

Remarque ? est pour les paramètres positionnels, et :term est pour les paramètres nommés.