9

使用前面的例子?如何在
不手动命名表列标题的情况下使用 JSON 对象插入/更新 mysql 表?并确保它是异步的。

var mysql = require('node-mysql');
var conn = mysql.createConnection({
    ...
});


var values = [
    {name:'demian', email: 'demian@gmail.com', ID: 1},
    {name:'john'  , email: 'john@gmail.com'  , ID: 2},
    {name:'mark'  , email: 'mark@gmail.com'  , ID: 3},
    {name:'pete ' , email: 'pete@gmail.com'  , ID: 4}
];

// var sql = "INSERT INTO Test (name, email, n) VALUES ?";


   conn.query(sql, [values], function(err) {
        if (err) throw err;
        conn.end();
    })
4

4 回答 4

6

你可以这样做:

for(var i = 0; i < values.length; i++){
    var post  = values[i]
    var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
         // Finish
    });
}

编辑

这就是您一次插入多个“帖子”的方式。

INSERT INTO posts (type, details)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),

您必须遍历第一个值才能获得这样的名称。

var names = [];
for(name in values[0]){
names.push(name);
// That would give you name, email, id
}

然后你必须创建自己的字符串来插入。

var newvalues = [];
for(var i = 0; i < values.length; i++){
    newvalues.push('(' + values[i].join(',') + ')');
}

然后执行查询:

connection.query('INSERT INTO posts (' + names.join(',') + ') VALUES ' + newvalues.join(',') , function(err, rows, fields) {
  // Result
});

您必须自己测试代码,这就是您的做法。

于 2013-03-12T21:34:16.930 回答
2

在此处查看“自定义格式”部分。如果您注意到,此示例在查询中使用命名占位符,允许您传递对象,并且占位符将替换为来自对象的匹配属性。为了清楚起见,我还粘贴了相关部分:

connection.config.queryFormat = function (query, values) {
  if (!values) return query;
  return query.replace(/\:(\w+)/g, function (txt, key) {
    if (values.hasOwnProperty(key)) {
      return this.escape(values[key]);
    }
    return txt;
  }.bind(this));
};

connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });
于 2013-03-12T17:46:48.960 回答
0

您可以创建一个小函数,将具有该格式的数组映射到插入语句。

您可以轻松地遍历字段并使用一些字符串连接。

于 2013-03-12T17:04:56.690 回答
0

更好的选择是(使用 MySQL 连接):

app.get('/yourcontroller/:id', function (req, res) {

    var id = req.params.id;
    var dataUpdate = req.body;

    connection.query(
      'UPDATE yourtable SET ? Where ID = ?',
      [dataUpdate, id],
      function (err, result) {
        if (err) throw err;
        console.log('Updated data ! Changed ' + result.changedRows + ' rows');
      }
    );

});
于 2016-09-19T03:13:49.950 回答