使用nodejs mysql模块从mysql获取JSON数据

时间:2014-06-09 12:08:42

标签: javascript mysql sql json node.js

我有一个大的JSON对象,我从文件中读取文本,将其解析为JSON并以blob数据类型存储在我的mysql数据库中。 当我在mysql控制台中SELECT * FROM *table*时,我在表中看到[object Object]并将JSON作为字符串上传时出错。

  

ER_PARSE_ERROR:您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   在'1000GenomeFreq'附近使用:“”,“dbsnpFreq”:“”,
  “labValidationInfo”:null,第1行的“yesFrequ”

如何使用node.js将JSON上传到MySQL数据库?

var id=0;
var json={};
var name,des;
io.on('connection', function(socket){
  socket.on('username', function(un){
    console.log("Username: "+un);
    var l=un.length;
    console.log(l);
    json=JSON.parse(un);
    name=json.label.name;
    des=json.label.description;
    console.log(name);
    switch(name){
      case 'VUS_I':id=3;
      break;    
      case 'VUS_II':id=4;
      break;
      case 'VUS_III':id=5;
      break;
      case 'VUS_IV':id=6;
      break;
    }   
    connection.query('insert into variant_card(data,effectID)values("'+json+'",'+id+')', function(err,result) {
      if(err) {
        console.log('adsfdas'+err);
        socket.emit('wru');
      } else {
        if(result==false){
          console.log("Error uploading file");
          socket.emit('wru');
        } else {
          console.log("File uploaded into database");
          socket.emit('done');
        }
      }
    });
    //socket.emit('pwd');
  });
});

JSON文件的一部分是

{
  "1000GenomeFreq":"",
  "dbsnpFreq":"",
  "labValidationInfo":null,
  "yesFrequency":1,
  "functionallyValidated":false,
  "mutationType":"changeThis",
  "conservationScores":null,
  "isDominantSegregating":true,
  "literatureKbCount":0,
  "exomeServerFreq":"",
  "rsID":"",
  "notations":[{
    "nmTranscripts":["NM_033507"],
    ...

1 个答案:

答案 0 :(得分:2)

这就是为什么你不应该直接将值连接到查询中(SQL注入攻击)。

你应该做的是使用占位符:

connection.query('insert into variant_card set ?',
                 { data: JSON.stringify(json), effectID: id },
                 function(err,result) {
  // ...
});