2017-02-10 5 views
0
다수의 행을 삽입

I는 다음 들어오는 페이로드가 : 상기 페이로드는 다음 적절한 opt_alarms 테이블에 전달 될 다음 함수 노드 (에 입력되는는 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" ] 

:

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 내에는 별도의 행에 들어오는 배열, 각 값을 나열했다. 어떤 제안을 감상 할 수있다.

+0

당신은 그 첫 번째 전체 기능 중 있답니다 때문에 함수에서 반환하지 않습니다

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

는이 같은 하나의 INSERT 문을 가질 수 있습니다 시간 라운드 라운드, 당신은'node.send (msg)'를 원한다. – hardillb

답변

2

루프 내에서 return을 사용하려는 경우 for 루프 대신 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 솔루션은 msg.payload의 각 값에 대해 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')