2015-11-30 3 views
-1

Я использую node-mysql на моем сервере node.js.Динамические переменные с оператором node-mysql 'WHERE'?

Проблема в том, что я пытаюсь передать переменную javascript в инструкцию WHERE sql и не собираю ее (по понятным причинам). Я просмотрел документацию node-mysql, включая метод SET, однако это не будет работать, поскольку переменная должна поступать из кода javascript, поскольку я бы хотел, чтобы она была динамически введена пользователем.

Любые идеи? Код ниже ..

api.js

  var mysql = require('mysql'); 

      var connection = mysql.createConnection({ 
       host: 'my server', 
       user: 'username', 
       password: 'password', 
       database: 'fruits' 
      }); 
      connection.connect() 

     var blueberriesWeight = "100" 

      connection.query('SELECT fruit_price FROM fruit WHERE fruit_weight = blueberriesWeight', 
       function(err, result){ 
      console.log(result) 
      console.error(err) 
      }) 
+0

'SELECT fruit_price FROM фрукты WHERE fruit_weight =' + blueberriesWeight. Но это доступно для SQL-инъекции. Было бы лучше использовать параметризованный запрос. – Rabbit

ответ

0

Там несколько способов, в соответствии с the docs:

var weight = 100; 

connection.query(
    'SELECT fruit_price FROM fruit WHERE fruit_weight=' + connection.escape(weight), 
    function(... 

и

хотя есть предупреждение, что все ? в строка запроса будет заменена.

0

Использование knex. Ссылка: http://knexjs.org/

var knex = require('knex')({ 
    client: 'mysql', 
    connection: { 
    host  : 'my server', 
    user  : 'your_database_user', 
    password : 'your_database_password', 
    database : 'fruits' 
    } 
}); 

var blueberriesWeight = 100; 
knex('fruit') 
    .select('fruit_price') 
    .where({ 
    fruit_weight: blueberriesWeight 
    }) 
    .asCallback(function(err, rows) { 
    //do stuff with the result 
    }); 

Эта библиотека делает написание яваскрипта операторов SQL запросов весело и легко. Вы можете использовать обратные вызовы или обещания и поддерживать их в хорошем состоянии.

Если вы заинтересованы в полном ОРМ, проверить аутов старшего брата knex, в Bookshelf