आप वास्तव में अच्छी शुरुआत कर रहे हैं, लेकिन हो सकता है कि आप इसे थोड़ा अधिक सोच रहे हों। चाल प्लेसहोल्डर्स के साथ एक क्वेरी बनाने की है (?
) एक स्ट्रिंग के रूप में और साथ ही मूल्यों की एक सरणी बनाएँ।
तो, अगर आपके पास 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
});