如何将一个NodeJSvariablesinput到一个SQL查询中
我想写一个包含NodeJSvariables的SQL查询。 当我这样做时,它给了我一个“未定义”的错误。
我希望下面的SQL查询识别flightNo
variables。 如何将一个NodeJSvariablesinput到SQL查询中? 它是否需要像$
或?
一样的特殊字符?
。
app.get("/arrivals/:flightNo?", cors(), function(req,res){ var flightNo = req.params.flightNo; connection.query("SELECT * FROM arrivals WHERE flight = 'flightNo'", function(err, rows, fields) {
您需要将variables的值放入SQL语句中。
这不好:
"SELECT * FROM arrivals WHERE flight = 'flightNo'"
这将工作,但它不是安全的SQL注入攻击:
"SELECT * FROM arrivals WHERE flight = '" + flightNo + "'"
为了从SQL注入安全,你可以像这样逃避你的价值:
"SELECT * FROM arrivals WHERE flight = '" + connection.escape(flightNo) + "'"
但最好的方法是用参数replace:
app.get("/arrivals/:flightNo", cors(), function(req, res) { var flightNo = req.params.flightNo; var sql = "SELECT * FROM arrivals WHERE flight = ?"; connection.query(sql, flightNo, function(err, rows, fields) { }); });
如果你有多个replace,使用一个数组:
app.get("/arrivals/:flightNo", cors(), function(req, res) { var flightNo = req.params.flightNo; var minSize = req.query.minSize; var sql = "SELECT * FROM arrivals WHERE flight = ? AND size >= ?"; connection.query(sql, [ flightNo, minSize ], function(err, rows, fields) { }); });
如果您正在使用> ES6:
connection.query(`SELECT * FROM arrivals WHERE flight = ${flightNo}`, function(err, rows, fields) {
如果你是<ES6:
connection.query("SELECT * FROM arrivals WHERE flight = " + flightNo, function(err, rows, fields) {
请注意, 这是非常糟糕的做法,因为您将容易受到SQL注入攻击。