从零学习node.js之mysql数据库的操作(五)

2020-06-17 05:54:20易采站长站整理

Objects会转换为key=value键值对的形式。嵌套的对象转换为字符串
undefined/null会转换为NULL
MySQL不支持NaN/Infinity,并且会触发MySQL错误

4.2 占位符

可以使用?作为参数占位符。在使用查询参数占位符时,在其内部自动调用

 connection.escape() 
方法对传入参数进行编码。


var params = ['test', 'test'];
var query = connection.query('SELECT * FROM `user` WHERE `username`=? AND `password`=?', params, function(err, result){
console.log(result);
});
console.log(query.sql); // SELECT * FROM `user` WHERE `username`='test' AND `password`='test'

同时,如果执行添加或更新操作时,还可以这样写:


var params = {username:'qwerty', password:'qwerty', email:'qwerty@qq.com'};
var query = connection.query('INSERT INTO `user` SET ?', params, function(err, result){
if(err) throw err;
console.log(result);
});
console.log(query.sql); // INSERT INTO `user` SET `username` = 'qwerty', `password` = 'qwerty', `email` = 'qwerty@qq.com'

数据库中的表明和字段名,可以使用??作为占位符,在拼接完成后会自动添加上“:


var params = ['user', 'username', 'test', 'password', 'test'];
var query = connection.query('SELECT * FROM ?? WHERE ??=? AND ??=?', params, function(err, result){
console.log(result);
})
console.log(query.sql); // SELECT * FROM `user` WHERE `username`='test' AND `password`='test'

4.3 使用MYSQL.FORMAT()转义参数

不多说,样例如下:


var userId = 1;
var sql = "SELECT * FROM ?? WHERE ?? = ?";
var inserts = ['user', 'uid', userId];
sql = mysql.format(sql, inserts); // SELECT * FROM `user` WHERE `uid` = 1

五、多语句查询

出于安全考虑node-mysql默认禁止多语句查询(可以防止SQL注入),启用多语句查询可以将multipleStatements选项设置为true:


var connection = mysql.createConnection({multipleStatements: true});

启用后可以在一个query查询中执行多条语句:


connection.query('SELECT 1; SELECT 2', function(err, results) {
if (err) throw err;

// `results`是一个包含多个语句查询结果的数组
console.log(results[0]);
console.log(results[1]);
});

总结

本节只是总结了node对mysql数据库的各种操作,但如果实际应用起来的话,还远远不够。努力学习中…希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。