sql >> Databáze >  >> RDS >> PostgreSQL

Jak napsat parametrizovaný dotaz SQL, aby se zabránilo vkládání SQL?

Nejsem uživatel Knex.js, ale při pohledu na dokumenty se zdá, že pomocí syntaxe objektů JavaScriptu Knex k definování predikátů dosahuje parametrizace.

Protože však používáte vestavěné funkce, musíte použít whereRaw .

Podívejte se na dokumenty ( http://knexjs.org/#Builder-whereRaw ) a ( http://knexjs.org/#Raw-Bindings ) Myslím, že chcete udělat toto:

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

Knex nemá orWhereRaw , takže pokud chcete logicky oddělit predikáty, měli byste použít longhand verzi:

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

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

Poznámka ? je pro poziční parametry a :term je pro pojmenované parametry.



  1. Můžete vložit zástupné symboly do vybrané části dotazu pomocí PDO?

  2. Potřebuji seznam zemí v T-SQL

  3. Zámek čtení řádků PostgreSQL

  4. Funkce NLS_COLLATION_NAME() v Oracle