2017-02-10 1 views
0

У меня есть следующий входящий полезный груз:For Loop для вставки несколько строк в SQL

msg.payload : array [16] 
[ "C-2B", "C-3A", "C-3B", "C-3C", "C-3E", "C-3F", "C-4A", "C-4B", "C-4D", "C-4E", "C-4F", "C-5A", "C-5B", "C-5C", "C-5D", "C-5E" ] 

выше полезная нагрузка в настоящее время вводится в следующей функции узел (которые затем будут направлены в соответствующую таблицу opt_alarms:

for (i = 0; i < msg.payload.length; i++){ 
    insert = "INSERT INTO opt_alarms VALUES (now(),'RECEIVING', '"+ String(msg.payload[i]) +"')"; 
    return {topic:insert, payload:insert} 
} 

Я пытаюсь разобрать поступающую полезной нагрузки и его список каждое значение, из входящего массива, на отдельной строке в том, что opt_alarms TABLE. Любые предложения будут оценены.

+0

Вы не хотите, чтобы вернуться из функции, так что будет выручать всей функции первой время вокруг цикла, вы хотите 'node.send (msg}' – hardillb

ответ

2

Если вы пытаетесь использовать возврат внутри цикла, я бы рекомендовал использовать map вместо цикла for. Таким образом, вместо того, чтобы для цикла:

var statements = msg.payload.map(function(x){ 
    return "INSERT INTO opt_alarms VALUES (now(),'RECEIVING', '" + string(x) + "'"; 
}); 

Это не совсем равнозначны, но так как вы создаете объект два элемента с тем же SQL в обоих, то по крайней мере, преобразует массив значений в массив операторов SQL.

Это не безопасный SQL-инъекций, поэтому вы хотите внимательно изучить, поддерживаются ли параметризованные запросы, и если вы не будете дезинфицировать свой вход в спецификации MySQL.

+0

Я думаю, вы пропустили закрытие скобки на VALUES-заявлении, в противном случае это хорошее решение :) – codtex

1

Решение @Chris Travers отлично работает, если вы хотите иметь инструкцию INSERT для каждого значения в msg.payload. С некоторыми изменениями, как это:

var insertIntoSql = "INSERT INTO opt_alarms VALUES " + msg.payload.map(function(x){ 
    return "(now(),'RECEIVING', '" + String(x) + "')"; 
}).join(','); 

Вы можете иметь один оператор INSERT, как это:

INSERT INTO opt_alarms VALUES 
(now(),'RECEIVING', 'C-2B'),(now(),'RECEIVING', 'C-3A'),(now(),'RECEIVING', 'C-3B'),(now(),'RECEIVING', 'C-3C'),(now(),'RECEIVING', 'C-3E'),(now(),'RECEIVING', 'C-3F'),(now(),'RECEIVING', 'C-4A'),(now(),'RECEIVING', 'C-4B'),(now(),'RECEIVING', 'C-4D'),(now(),'RECEIVING', 'C-4E'),(now(),'RECEIVING', 'C-4F'),(now(),'RECEIVING', 'C-5A'),(now(),'RECEIVING', 'C-5B'),(now(),'RECEIVING', 'C-5C'),(now(),'RECEIVING', 'C-5D'),(now(),'RECEIVING', 'C-5E') 
Смежные вопросы