2016-12-15 2 views
1

NodeJS変数を含むSQLクエリを作成したいとします。私がこれをすると、それは私に「未定義」というエラーを与えます。NodeJS変数をSQLクエリに入力する方法

以下のSQLクエリでflightNo変数を認識したいとします。 NodeJS変数を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) { 

答えて

4

変数のの値をSQLステートメントに入れる必要があります。

これは良くない:これは動作しますが、それはSQLインジェクション攻撃から安全ではありません

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

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

SQLインジェクションからの安全のために、あなたは次のようにあなたの価値をエスケープすることができますこれは:

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

しかし、最も良い方法はパラメータ置換を使用します。

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

あなたが作るために、複数の置換を持っている場合は、配列を使用します。

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

を使用している場合> 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インジェクション攻撃。

関連する問題