带有 IN 和 AND 的 NodeJS SQLite3 准备语句

NodeJS SQLite3 prepared statement with IN and AND

我在 Express 中有此 API 设置,但我不知道如何使用 node.js 中的 SQLite3 使用 IN 语句正确准备语言过滤器。

第一个查询正确应用了语言过滤器。我得到了正确的结果,但这可能会造成 sql 注入风险。

由于语言过滤器,第二个查询找不到结果。

如何正确设置 db.prepare 语句以接受单词和语言?

app.post('/api/languages/:language/getTextWords', (req, res) => {
    let words = req.body.map(word => word.toLowerCase())
    let wordMap = words.map(() => "?").join(',')
    let language = req.params.language.toLowerCase();

    // the language filter is applied correctly I get results but the statement is not fully prepared
    // let query = db.prepare(`SELECT * FROM words WHERE word IN (${wordMap}) AND language = '${language}'`, words) 
    
    // no results are found because of the language filter
    let query = db.prepare(`SELECT * FROM words WHERE word IN (${wordMap}) AND language = '?'`, words, language)
    query.all((err, rows) => {
        if (err) {
            res.status(500).send(err.message)
            throw err;
        }

        if (!rows) {
            res.json([])
        }

        if (rows) {
            res.json(rows)
        }
    })
})

这是有问题的数据库 table 的屏幕截图: words table

将值作为数组传递:

let query = db.prepare(`SELECT * FROM words WHERE word IN (${wordMap}) AND language = ?`, [...words, language]);