Node.js数据库操作之查询MySQL数据库(二)

2020-06-17 07:04:03易采站长站整理

前言

我们在上一篇文章《Node.js数据库操作之连接MySQL数据库(一)》中已经学习了Nodejs连接MySQL数据库的几种方法,数据库连接上了之后就需要对数据库进行查询。本篇文章介绍一下查询MySQL数据库的方法。下面话不多说,来看看详细的介绍吧。

查询方式

上一篇文章中,我们用到了一种查询数据库的最基本的方法:

connection.query(sqlString, callback)

第一个参数是一个SQL语句,可以是任意的数据库语句,而第二个参数是一个回调函数,查询结果通过回调参数的方式返回。


connection.query(
'select * from book where author = "xyf" and country = "china"',
function(err, result) {
console.log(result);
}
);

这是最简单的查询方式,但是存在着两个问题,一个是需要拼接字符串,比较繁琐;另一个是容易被sql注入攻击,因此我们有了第二种查询方式。

占位符注入查询

第二种查询方式是采用了占位符的形式

connection.query(sqlString, values, callback)
,这样就不需要进行恶心的字符串的拼接了。


connection.query(
'select * from book where author = ? and country = ?',
['xyf', 'china'],
function(err, result) {
console.log(result);
}
);

使用对象查询方式

第三种查询方式我们将查询语句和查询值组合成一个对象来进行查询。它的形式是这样的:

connection.query(object, callback)


connection.query(
{
sql: 'select * from book where author = ? and country = ?',
values: ['xyf', 'china'], // 作为对象的属性
timeout: 40000,
},
function(err, result) {
console.log(result);
}
);

组合查询方式

将第二种和第三种方式可以结合起来使用,查询值作为query方法的一个参数,而不是作为对象中的一个属性。


connection.query(
{
sql: 'select * from book where author = ? and country = ?',
timeout: 40000,
// ['corner', 'us'] // 如果同时设置,那么此时不会生效
},
['xyf', 'china'], // 作为query函数的一个参数
function(err, result) {
console.log(result);
}
);

需要注意的是,如果我们既将查询值作为对象的属性,又将其作为query函数的参数,这个时候函数中的参数将会覆盖对象的属性,也就是说此时只有参数的值生效。

解析查询值