Läs noga från knex-dokumentationen hur du överför värden till knex raw (http://knexjs.org/#Raw ).
Om du skickar värden som parameterbindning till rå som:
knex.raw('select * from foo where id = ?', [1])
I så fall skickas parametrar och frågesträng separat till databasdrivrutinen som skyddar frågan från SQL-injektion.
Andra frågebyggarmetoder använder alltid bindningsformat internt så att de också är säkra.
För att se hur en viss fråga skickas till databasdrivrutinen kan man göra:
knex('foo').where('id', 1).toSQL().toNative()
Som kommer att mata ut SQL-sträng och bindningar som ges till drivrutinen för att köra frågan (https://runkit.com/ embed/2yhqebv6pte6 ).
Det största misstaget man kan göra med knex-råfrågor är att använda javascript-mallsträng och interpolera variabler direkt till SQL-strängformat som:
knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS
En sak att notera är att knex tabell-/identifieringsnamn inte kan skickas som bindningar till föraren, så med dessa bör man vara extra försiktig med att inte läsa tabell-/kolumnnamn från användaren och använda dem utan att först validera dem ordentligt.
Redigera:
Genom att säga att identifierarnamn inte kan skickas som bindningar menar jag att när man använder ??
knex -bindning för identifierarnamn, som kommer att återges som en del av SQL-strängen när den skickas till databasdrivrutinen.