Přečtěte si pozorně z dokumentace knex, jak předávat hodnoty do knex raw (http://knexjs.org/#Raw ).
Pokud předáváte hodnoty jako vazbu parametrů na raw jako:
knex.raw('select * from foo where id = ?', [1])
V takovém případě jsou parametry a řetězec dotazu předány odděleně do databázového ovladače, který chrání dotaz před vložením SQL.
Jiné metody vytváření dotazů vždy interně používají formát vazby, takže jsou také bezpečné.
Chcete-li zjistit, jak je určitý dotaz předán ovladači databáze, můžete udělat:
knex('foo').where('id', 1).toSQL().toNative()
Což vypíše řetězec SQL a vazby, které jsou dány ovladači pro spuštění dotazu (https://runkit.com/ embed/2yhqebv6pte6 ).
Největší chybou, kterou lze s nezpracovanými dotazy knex udělat, je použít řetězec šablony javascriptu a interpolovat proměnné přímo do formátu řetězce SQL, jako je:
knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS
Jedna věc, kterou je třeba poznamenat, je, že názvy tabulek/identifikátorů knex nelze předat jako vazby ovladači, takže s nimi byste měli být zvlášť opatrní, abyste nečetli názvy tabulek / sloupců od uživatele a nepoužili je, aniž byste je nejprve řádně ověřili.
Upravit:
Tím, že říkám, že názvy identifikátorů nelze předávat jako vazby, myslím, že když se používá ??
knex -binding pro název identifikátoru, který bude vykreslen jako součást řetězce SQL při předání ovladači databáze.