问题描述
在NODE.JS中,mysql模块的通用查询connection.query(querySql,values,function(){})的基础上,怎么将mysql动态参数查询(没有、一个、多个参数)进行抽象?
相关代码
有无条件参数selectAll()
有query('SELECT * FROM TABLE ',null,callback);
有一个条件参数select(values)
期待的和最后的结果:'SELECT * FROM TABLE '
有query('SELECT * FROM TABLE WHERE ?',values,callback);
其中一般 values={age: 23};
期待的和最后的结果:'SELECT * FROM TABLE WHERE age=23'
初步的尝试
将无条件参数整合到一个条件参数里
query('SELECT * FROM TABLE WHERE ?',values,callback);
其中一般 values={1: 1};
期待的结果是
'SELECT * FROM TABLE WHERE 1=1;
但是会报错,实际看到的错误信息
Error: ER_BAD_FIELD_ERROR: Unknown column '1' in 'where clause'
它将其中第一个1当做列来查询,报错了。
初步尝试失败
其他的尝试
多个条件参数的大概长这样?select(values)
query('SELECT * FROM TABLE WHERE ?',values,callback);
如果其中values={age : 23,gender : 'male'};
期待的结果是
'SELECT * FROM TABLE WHERE age=23 and gender : 'male';
但是会报错,实际看到的错误信息
check the manual that corresponds to your MySQL server version for the right syntax to use near ' gender = 'male'' at line 1;
另外我的尝试
如果其中values=[{age : 23},{gender : 'male'}];
输出的结果和values={age: 23}是一样的。方法忽视了第二个条件参数。
(这种参数形式values=[{age : 23},{gender : 'male'}];
在query('UPDATE TABLE SET ? WHERE ?',values,callback);是可用的)
尝试又失败
其他的尝试
query('SELECT * FROM TABLE WHERE ? AND ?',values,callback);
values=[{age : 23},{gender : 'male'}];
这是成功的,但是这所有的看起来好傻,因为都是查询语句,无非参数的多寡,有没有更好的方法将他们整合