sitelink1 https://blog.naver.com/n_jihyeon/222084769999 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

//** scheduleList 모양은 [ [], [], [], ... ]

let bindVariables = '';

let queryArray = [];

queryArray = scheduleList.flat(); // 한번 flat 하게 만들어주어야 함

scheduleList.forEach((item, index) => {

    if (scheduleList.length === (index + 1)) {

        bindVariables += `(?, ?, ?, '-')`;

    } else {

        bindVariables += `(?, ?, ?, '-'),`; // 입력하려는 컬럼 수와 같아야 함

    }

})

const connection = await pool.getConnection();

const queryString = 

    `INSERT INTO SCHEDULE 

        (FOLDER_ID, DAYS, PLACE_ID, SCHEDULE_NEXT) 

    VALUES 

        ${bindVariables}`;

console.log(queryString);

let result = await connection.query(queryString, [...queryArray]); // 전개연산자로 풀어서 넣어주어야 함

 

 

 

 

 

* 체크포인트

 

- 실행하려는 SQL문

    INSERT INTO SCHEDULE (FOLDER_ID , DAYS, PLACE_ID , SCHEDULE_NEXT) 

    VALUES 

    ('447e5d70', '1', '3d5af52f', '-'), 

    ('447e5d70', '2', '3d5af52f', '-'), 

    ('447e5d70', '3', '3d5af52f', '-'), 

    ('447e5d70', '4', '3d5af52f', '-'), 

    ('447e5d70', '5', '3d5af52f', '-');

 

- sql bulk insert 에 대한 script code는 2차원 배열이다

    >> Nested arrays are turned into grouped lists (for bulk inserts), e.g. [['a', 'b'], ['c', 'd']] turns into ('a', 'b'), ('c', 'd')

 

- 2차원 배열 방식으로 다음과 같은 Node.js 코드를 작성할 수 있다

var mysql = require('mysql');

var conn = mysql.createConnection({

    ...

});

 

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

var values = [

    ['demian', 'demian@gmail.com', 1], 

    ['john', 'john@gmail.com', 2], 

    ['mark', 'mark@gmail.com', 3], 

    ['pete', 'pete@gmail.com', 4]

];

 

conn.query(sql, [values], function (err) {

    if (err)

        throw err;

    conn.end();

});

  하지만 다음과 같이 2가지 에러가 발생한다
  1) INSERT INTO TABLE (COLUMN_1, COLUMN_2) VALUES ?
      -> 이렇게만 했을 경우 '?' near 에서 syntax 에러가 남
  2) [[array], [array], [array], ...] 를 그대로 대입하면
      -> Error: Malformed communication packet 에러가 남
  때문에, 본문의 맨위에 적은 코드와 같이 dynamic 하게 작성해줘야 한다