mysql2

변경 이유

Connection.execute() 지원

sql injection 을 막기 위한 prepared statement 를 지원해준다. 이때 prepared statement는 쿼리문과 데이터를 분리시켜 의도치 않게 쿼리문이 수정되는걸 방어해주는 역할을 한다.

따라서 connection.execute() 를 사용하기 위해선 쿼리문과 데이터를 분리해야 하며 다음과 같은 방식으로 활용할 수 있다.


import mysql from 'mysql2/promise'

pool = mysql.createPool(CONFIG...)

const sql = 'INSERT INTO user (id, name, profileImage) VALUES (?, ?, ?)';

pool
  .execute(sql, [user.id, user.username, user.profileImage]) // 각 ?위치에 배열이 순서대로 들어감
  .then((rows, fields) => consoleLogger.info('rows: ', rows))
  .catch(err => {
    if (err.code === 'ER_DUP_ENTRY') {
      console.info(
        '=============================================\\n' +
          `이미 등록돼 있는 사용자입니다!\\n` +
          '============================================='
      );
    } else {
      console.error(`query error : ${err}`);
    }
  });
}

createPool에서 지원하는 옵션