今天在使用 Node.js 搭建个人服务器的过程使用了 mysql 数据库,发生了这个错误。
由于是远程 post 过来的请求,所以一直以为是字符串就没事了忽略了类型
.
传入数据的类型与数据库内的数据类型不匹配
比如我这里是要传入一个字符串:
var save = function save(connection, response, params){);
var myObj = {
"nickname" : params.body.nickname + "",
"phone" : params.body.phone + "",
"password" : params.body.password + "",
"avatar" : params.body.avatar + "",
};
// customers guests
var string = 'INSERT INTO customers(id,phone,password,avatar) VALUES(' + myObj.nickname + ',' + myObj.phone + ',' + myObj.password + ',' + myObj.avatar + ')';
//插入数据
connection.query(string, function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
response.end(JSON.stringify(results));
});
connection.end();
}
其中 params.body.nickname params.body.phone 等都是以字符串形式上传的,而我数据库中这几列也都是以字符串定义的,所以就理所当然了
也就是忽略了 SQL 命令的格式,正确的敏玲格式应该如下:
var string = 'INSERT INTO customers(nickname,phone,password,avatar) VALUES(' + '"' + myObj.nickname + '"' + ',' + '"' + myObj.phone + '"' + ',' + '"' + myObj.password + '"' + ',' + '"' + myObj.avatar + '"' + ')';
也就是在每个变量的两头都加上了 ---> ‘"’ <--- (双引号),结果如下:
// 保存
var save = function save(connection, response, params){
// var myObj = JSON.parse((JSON.stringify(params)));
var myObj = {
"nickname" : params.body.nickname ,
"phone" : params.body.phone ,
"password" : params.body.password ,
"avatar" : params.body.avatar ,
};
// customers guests
var string = 'INSERT INTO customers(nickname,phone,password,avatar) VALUES(' + '"' + myObj.nickname + '"' + ',' + '"' + myObj.phone + '"' + ',' + '"' + myObj.password + '"' + ',' + '"' + myObj.avatar + '"' + ')';
//插入数据
connection.query(string, function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
response.end(JSON.stringify(results));
});
connection.end();
}
希望我的解决对你有帮助~~~