Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer une requête dynamique en liant des paramètres dans node.js-sql ?

Vous avez pris un très bon départ, mais vous y avez peut-être un peu trop réfléchi. L'astuce consiste à construire une requête avec des espaces réservés (? ) sous forme de chaîne et créer simultanément un tableau de valeurs.

Donc, si vous avez params = { name: 'foo', age: 40 } , vous souhaitez créer les objets suivants :

where = 'name LIKE ? AND age = ?';
values = [ '%foo%', 40 ];

Si vous n'avez que { name: 'foo' } , vous les créerez à la place :

where = 'name LIKE ?';
values = [ '%foo%' ];

Dans tous les cas, vous pouvez utiliser ces objets directement dans la query méthode, c'est-à-dire :

var sql = 'SELECT * FROM table WHERE ' + where;
connection.query(sql, values, function...);

Comment construisons-nous ces objets, alors? En fait, le code est vraiment similaire à votre buildQuery fonction, mais moins complexe.

function buildConditions(params) {
  var conditions = [];
  var values = [];
  var conditionsStr;

  if (typeof params.name !== 'undefined') {
    conditions.push("name LIKE ?");
    values.push("%" + params.name + "%");
  }

  if (typeof params.age !== 'undefined') {
    conditions.push("age = ?");
    values.push(parseInt(params.age));
  }

  return {
    where: conditions.length ?
             conditions.join(' AND ') : '1',
    values: values
  };
}

var conditions = buildConditions(params);
var sql = 'SELECT * FROM table WHERE ' + conditions.where;

connection.query(sql, conditions.values, function(err, results) {
  // do things
});