[英]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.