あなたは本当に良いスタートを切っていますが、あなたはそれを少し考えすぎていたかもしれません。秘訣は、プレースホルダー(?
)を使用してクエリを作成することです。 )文字列として、同時に値の配列を作成します。
したがって、params = { name: 'foo', age: 40 }
がある場合 、次のオブジェクトを作成します:
where = 'name LIKE ? AND age = ?';
values = [ '%foo%', 40 ];
{ name: 'foo' }
しかない場合 、代わりにこれらを作成します:
where = 'name LIKE ?';
values = [ '%foo%' ];
どちらの方法でも、これらのオブジェクトをquery
で直接使用できます。 メソッド、つまり:
var sql = 'SELECT * FROM table WHERE ' + where;
connection.query(sql, values, function...);
では、これらのオブジェクトをどのように構築するのでしょうか。実際、コードはbuildQuery
と非常によく似ています。 機能しますが、それほど複雑ではありません。
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
});