如何使用带有准备好的语句的数据数组更新多列?
我有2个数组:
columns = ['column1', 'column2'];
data = ['data1', 'data2'];
我想使用准备好的查询更新表:
conn.query('UPDATE table SET ?? = ? WHERE id = ?', [columns, data, id],
function(err, info){
SQL例外查询:
UPDATE table SET column1 = 'data1', column2 = 'data2' WHERE id = 10
但是我得到的东西看起来像:
UPDATE table SET 'column1', 'column2' = 'data1', 'data2' WHERE id = 10
此功能适用于选择或插入,但似乎不适用于更新查询。关于如何获得这项工作的任何想法?
回答如下:从node-mysql docs,关于转义查询值,我们有这个:
数组变成列表,例如['a','b']变为'a','b'
,因此无法按您期望的方式工作。
但是,在文档中我们也有这个:
对象被转换为key ='val'对。嵌套的对象将转换为字符串。
带有示例:
var post = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
// Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
因此,为了做您想做的事,最好的选择IMO是将您的数组转换成类似这样的对象:
{
column1: 'data1',
column2: 'data2'
}
如何使用带有准备好的语句的数据数组更新多列?
我有2个数组:
columns = ['column1', 'column2'];
data = ['data1', 'data2'];
我想使用准备好的查询更新表:
conn.query('UPDATE table SET ?? = ? WHERE id = ?', [columns, data, id],
function(err, info){
SQL例外查询:
UPDATE table SET column1 = 'data1', column2 = 'data2' WHERE id = 10
但是我得到的东西看起来像:
UPDATE table SET 'column1', 'column2' = 'data1', 'data2' WHERE id = 10
此功能适用于选择或插入,但似乎不适用于更新查询。关于如何获得这项工作的任何想法?
回答如下:从node-mysql docs,关于转义查询值,我们有这个:
数组变成列表,例如['a','b']变为'a','b'
,因此无法按您期望的方式工作。
但是,在文档中我们也有这个:
对象被转换为key ='val'对。嵌套的对象将转换为字符串。
带有示例:
var post = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
// Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
因此,为了做您想做的事,最好的选择IMO是将您的数组转换成类似这样的对象:
{
column1: 'data1',
column2: 'data2'
}