如何将一个NodeJSvariablesinput到一个SQL查询中

我想写一个包含NodeJSvariables的SQL查询。 当我这样做时,它给了我一个“未定义”的错误。

我希望下面的SQL查询识别flightNovariables。 如何将一个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注入攻击。