prepare, unprepare, execute
로 prepared statements 사용 가능. prepared statement 로 sql injection 보안 위험을 방지할 수 있고, 반복적인 query 를 mysql 서버에서 매번 새로 파싱할 필요가 없어서 효율적이다.mysql/promise
로 promise wrapper 지원해줘서 promise 객체로 query, execute
등을 사용할 수 있다. callback 으로 할 때 보다 쉽고 간결하게 error handling 가능.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}`);
}
});
}