web-dev-qa-db-fra.com

Comment entrer une variable NodeJS dans une requête SQL

Je veux écrire une requête SQL contenant une variable NodeJS. Lorsque je fais cela, cela me donne une erreur «indéfinie».

Je veux que la requête SQL ci-dessous reconnaisse la variable flightNo. Comment une variable NodeJS peut-elle être entrée dans une requête SQL? At-il besoin de caractères spéciaux autour comme $ ou ??.

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) {
4
GleneaMan

Vous aurez besoin de mettre la value de la variable dans l'instruction SQL.

Ce n'est pas bien:

"SELECT * FROM arrivals WHERE flight = 'flightNo'"

Cela fonctionnera, mais ce n’est pas sûr des attaques par injection SQL:

"SELECT * FROM arrivals WHERE flight = '" + flightNo + "'"

Pour être à l'abri d'une injection SQL, vous pouvez échapper votre valeur comme ceci:

"SELECT * FROM arrivals WHERE flight = '" + connection.escape(flightNo) + "'"

Mais le meilleur moyen est avec la substitution de paramètre:

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) {
  });
});

Si vous avez plusieurs substitutions à faire, utilisez un tableau:

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) {
  });
});
8
Dave

Si vous utilisez> ES6:

connection.query(`SELECT * FROM arrivals WHERE flight = ${flightNo}`, function(err, rows, fields) {

Si vous êtes <ES6:

connection.query("SELECT * FROM arrivals WHERE flight = " + flightNo, function(err, rows, fields) {

Veuillez noter que c’est une pratique TRÈS MAUVAISE car vous serez vulnérable aux attaques par injection SQL.

0
DeadEye