[node.js mySQL] node mysql 다중쿼리문 실행 에러 ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
node.js에서 다중 쿼리문 실행 시 주의해야 할 점을 적어볼까한다.
이유는 내가 가끔 똑같은 실수를 반복하기 때문이다....ㅠ_^
사용할 공통 예시 코드
// 다중 쿼리 1
쿼리1 = "INSERT INTO board(cid, pcode, category, rating, title, content) VALUES(?, ?, ?, ?, ?, ?); ";
데이터1 = [req.body.cid , req.body.pcode ,req.body.category ,req.body.rating ,req.body.title ,req.body.content];
let query1 = db.format(sqlQuery, data);
// 다중 쿼리 2
let 쿼리2 = "UPDATE orderDetail SET addreview = ? WHERE ocode = ? AND pcode = ? AND cid = ?;"
let 데이터2 = ['1', req.body.ocode, req.body.pcode, req.body.cid]
let query2 = db.format(sqlQuery2, data2);
// sql 실행 (db는 mysql connection 파일을 import해온 것)
sql = db.query(query1 + query2, (err, row) => {
//여기 아래 result는 제가 결과 출력하려고 만든 함수입니다.
result((row[0].affectedRows + row[1].affectedRows));
});
1. query문 내에 ; 세미콜론 생략
qeury1 에는 쿼리1의 내용에 데이터가 ?에 채워져있는 String이 반환된다.
콘솔에 query1을 찍어보면 이렇게 결과가 나온다.
query2도 동일하다.
그럼 sql을 query()함수를 실행할 때 query1 + query2를 해주는데 어떤 결과가 나올까?
이렇게 query1 + query2 는 두 String이 그저 합쳐져서 실행된다.
이때 query1 과 2 사이에 ; 세미콜론이 없다면??
INSERT INTO board(cid, pcode, category, rating, title, content) VALUES('1', '0001', '후기', 5, '제목 입력', '내용 입력함') UPDATE orderDetail SET addreview = '1' WHERE ocode = '202105101-0017' AND pcode = '0001' AND cid = '1';
맨 끝의 쿼리문에 ;세미콜론이 없다면 node mySQL이 알아서 처리해주겠지만
이렇게 두 문장 이상을 구분해야될 때 ; 가 없다면 저 문장을 한문장으로 처리할 것이다...
꼭 query문 내에 ; 세미콜론을 추가해서 구분해주도록하자.
2. 뭐 적으려고했는데 까먹음...생각나면 추가할게여 (;´д`)ゞ