使用前面的例子?如何使用
来插入/更新mysql表
没有手动命名表列标题的JSON对象?并确保它是异步的。
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();
})
答案 0 :(得分:5)
你可以这样做:
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
});
你必须自己测试代码,这就是你要做的。
答案 1 :(得分:2)
查看“自定义格式”部分here。如果您注意到,此示例在查询中使用命名占位符,允许您传递对象,并且占位符将替换为来自对象的匹配属性。为清晰起见,我还粘贴了相关部分:
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" });
答案 2 :(得分:0)
您可以创建一个小函数,将具有该格式的数组映射到insert语句。
您可以轻松遍历字段并使用一些字符串连接。
答案 3 :(得分: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');
}
);
});