[TIL] 25.01.25 SAT

GDORI·2025년 1월 25일
0

TIL

목록 보기
171/184
post-thumbnail

MySQL INSERT 쿼리에서 VALUES ? 플레이스홀더 사용

오랜만에 SQL.. 쉽지 않구만

MySQL에서 여러 레코드를 한 번에 삽입하려면 INSERT INTO ... VALUES ? 구문을 사용할 수 있다. 이때 ? 플레이스홀더는 배열의 배열 형식으로 전달되어야 하는데, 이를 제대로 사용하지 않으면 SQL 구문에서 오류가 발생한다.

오류

다음과 같은 SQL 구문을 사용했을 때 오류가 발생

const queryData = [sector_id, difficulty, title, description, hint, explanation, reference];

// 쿼리 실행
const [rows] = await pools.PROBLEM_DB.query(
  "INSERT INTO problems (sector_id, difficulty, title, description, hint, explanation, reference) VALUES ?",[queryData]);

에러 메시지:

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 '3' at line 1

VALUES는 2중 배열로 전달해야..

VALUES ? 구문은 배열 안에 배열 형태로 값을 전달받는다. 따라서 queryData는 단일 배열로 되어 있었고, 이는 INSERT INTO ... VALUES ?에서 예상하는 형식과 맞지 않았다. queryData를 배열 안에 배열 즉, 2차원 배열로 감싸면 문제를 해결할 수 있다. INSERT INTO ... VALUES ?는 한 번에 여러 개의 레코드를 삽입할 때 사용되므로, 삽입하려는 데이터는 배열의 배열 형식으로 전달되어야 한다.

수정 코드

const queryData = [
  [sector_id, difficulty, title, description, hint, explanation, reference]
];
// 쿼리 실행
const [rows] = await pools.PROBLEM_DB.query(
  "INSERT INTO problems (sector_id, difficulty, title, description, hint, explanation, reference) VALUES ?", [queryData]);
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보