繁体   English   中英

带有 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)
        }
    })
})

这是相关数据库表的屏幕截图: words table

将值作为数组传递:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM