[ Node.js ] ER_BAD_FIELD_ERROR: Unknown column '(你提交的字段)' in 'field list'

今天在使用 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();
}

希望我的解决对你有帮助~~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值