就该主题提出了几个问题。但我在任何地方都找不到确切的答案。 下面的代码会导致sql注入(inject)吗?如果是的话如何逃脱?
db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + search + '%"', (err, result) => {
if (err) throw err
res.send(result)
})
我已经用 mysql.escape()
尝试了下面的代码。但在这种情况下 SQL 查询不起作用:
db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + mysql.escape(search) + '%"', (err, result) => {
if (err) throw err
res.send(result)
})
最佳答案
您可以在传递给查询的参数中指定 LIKE 模式,如下所示,该参数将按照记录 here 安全地转义
let search = "Terry";
let sql = `SELECT USER.id, USER.username FROM USER
LEFT JOIN user_photo photo
ON USER.id = photo.user_id WHERE USER.username LIKE ?`;
db.query(sql, [`%${search}%`], (err, result) => {
if (err) throw err
res.send(result);
})
关于mysql - 避免在 Node js 中的 SQL LIKE 查询中注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63189368/