PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak napisać sparametryzowaną kwerendę sql, aby zapobiec wstrzyknięciu SQL?

Nie jestem użytkownikiem Knex.js, ale patrząc na dokumentację wygląda na to, że użycie przez Knex składni obiektów JavaScript do definiowania predykatów jest sposobem, w jaki osiąga się parametryzację.

Jednak ponieważ używasz wbudowanych funkcji, musisz użyć whereRaw .

Przeglądanie dokumentacji ( http://knexjs.org/#Builder-whereRaw ) i ( http://knexjs.org/#Raw-Bindings ) Myślę, że chcesz to zrobić:

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

Knex nie ma orWhereRaw , więc powinieneś użyć wersji odręcznej, jeśli chcesz logicznie oddzielić predykaty:

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

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

Uwaga ? dotyczy parametrów pozycyjnych, a :term dotyczy nazwanych parametrów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL nie może się połączyć:nie znaleziono definicji usługi

  2. konwertuj format geometrii Postgres na WKT

  3. Wstawianie rekordów autoreferencyjnych w Postgresql

  4. PostgreSQL, jak sprawdzić, które zapytania zostały uruchomione

  5. Warunek na liczbę powiązanych rekordów w SQL