Se hicieron varias preguntas sobre este tema. Pero no pude encontrar la respuesta exacta en ninguna parte. ¿El siguiente código causará una inyección de sql? Si es así, ¿cómo escapar de él?
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) })
Probé el siguiente código con mysql.escape()
. Pero la consulta SQL no funciona en este caso:
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) })
Puede especificar el patrón LIKE en el parámetro que pasa a la consulta de esta manera, el parámetro se escapará de forma segura como se documenta aquí
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); })