서버 측에서 데이터베이스에 여러 개의 쿼리문을 연속적으로 보내기 위해선 어떻게 해야 할까?
mysql 라이브러리에는 위와 같은 상황도 처리할 수 있도록 .query() 함수를 설정해 놓았다.
하지만, 라이브러리 설명에 따르면 연속된 여러 쿼리문을 지원하는 것은 SQL injection 공격에 취약하기 때문에 기본적으로 기능을 사용할 수 없도록 설정해 놓았다.
Multiple statement queries
위와 같은 이유로 multiple statement query를 사용하기 위해선 아래와 같이 설정을 변경해주어야 한다.
var connection = mysql.createConnection({multipleStatements: true});
위와 같이 설정을 바꾸면 아래와 같이 쿼리문이 들어가는 파라미터에 여러 쿼리문을 한꺼번에 넣어 처리할 수 있다.
connection.query('SELECT 1; SELECT 2', function (error, results, fields) {
if (error) throw error;
// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}]
console.log(results[1]); // [{2: 2}]
});
사실 이 기능은 query stream 기능을 통해 똑같은 결과를 얻을 수 있다.
var query = connection.query('SELECT 1; SELECT 2');
query
.on('fields', function(fields, index) {
// the fields for the result rows that follow
})
.on('result', function(row, index) {
// index refers to the statement this result belongs to (starts at 0)
});
라이브러리 제작자의 글을 읽어보면 가급적 multiple statement query 대신 query stream 사용을 권장하는 듯 하다.
말이에 보면, 아래와 같이 안내문이 나와있다.
"multiple statement query 인터페이스는 실험적인 것임을 알아주세요. 그리고 관련해서 피드백을 주시면 감사하겠습니다. "
'Back-End > SQL' 카테고리의 다른 글
[MySql] 하나의 쿼리문을 여러번 반복하려면? (0) | 2022.01.02 |
---|---|
[SQL] SQL join 정리 (0) | 2021.12.20 |