Baca dengan cermat dari dokumentasi knex cara meneruskan nilai ke knex raw (http://knexjs.org/#Raw ).
Jika Anda meneruskan nilai sebagai pengikatan parameter ke mentah seperti:
knex.raw('select * from foo where id = ?', [1])
Dalam hal ini, parameter dan string kueri diteruskan secara terpisah ke driver database yang melindungi kueri dari injeksi SQL.
Metode pembuat kueri lainnya selalu menggunakan format pengikatan secara internal sehingga juga aman.
Untuk melihat bagaimana kueri tertentu diteruskan ke driver basis data yang dapat dilakukan:
knex('foo').where('id', 1).toSQL().toNative()
Yang akan menampilkan string SQL dan binding yang diberikan kepada driver untuk menjalankan kueri (https://runkit.com/ embed/2yhqebv6pte6 ).
Kesalahan terbesar yang dapat dilakukan dengan kueri mentah knex adalah menggunakan string templat javascript dan menyisipkan variabel langsung ke format string SQL seperti:
knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS
Satu hal yang perlu diperhatikan adalah bahwa nama tabel/pengidentifikasi knex tidak dapat diteruskan sebagai binding ke driver, jadi dengan nama tersebut harus ekstra hati-hati untuk tidak membaca nama tabel/kolom dari pengguna dan menggunakannya tanpa memvalidasinya terlebih dahulu dengan benar.
Sunting:
Dengan mengatakan bahwa nama pengidentifikasi tidak dapat diteruskan sebagai pengikat, maksud saya ketika seseorang menggunakan ??
knex -binding untuk nama pengenal, yang akan dirender sebagai bagian dari string SQL saat diteruskan ke driver database.