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