sql >> Database >  >> RDS >> Mysql

Hoe een dynamische query te bouwen door parameters te binden in node.js-sql?

Je bent heel goed begonnen, maar misschien heb je er een beetje over nagedacht. De truc is om een ​​query te maken met tijdelijke aanduidingen (? ) als een tekenreeks en bouw tegelijkertijd een reeks waarden op.

Dus, als je params = { name: 'foo', age: 40 } hebt , wilt u de volgende objecten bouwen:

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

Als je alleen { name: 'foo' } . hebt , bouw je deze in plaats daarvan:

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

Hoe dan ook, u kunt deze objecten direct in de query . gebruiken methode, d.w.z.:

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

Hoe bouwen we die objecten dan? In feite lijkt de code erg op uw buildQuery functie, maar minder complex.

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



  1. Beste optie om gebruikersnaam en wachtwoord op te slaan in de Android-app

  2. Hoe u uw ProxySQL-loadbalancers kunt clusteren

  3. Een opgeslagen procedure uitvoeren in een selectiequery

  4. Hoe RandomBlob() werkt in SQLite