怎么将mysql动态参数查询(没有、一个、多个参数)进行抽象?

问题描述

在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'}];
这是成功的,但是这所有的看起来好傻,因为都是查询语句,无非参数的多寡,有没有更好的方法将他们整合

阅读 2.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题