자잘오류 ◾ 자잘팁 ◾ 유용도구

[1121] DB 쿼리문 예약어 오류

문앵 2021. 11. 21. 16:06
const productInfo_sql =()=>{
    return(
'INSERT INTO product (product_no,name,explain,creater,date,likes,type,
total_qty,leftover,symbol,contractAddr,tokenURI) VALUES(?,?,?,?,?,0,?,?,?,?,NULL,NULL)'
    )
}

 

쿼리문을 작성할 때 이런식으로 쿼리문을 작성하니 오류가 났음.

why? 맨 앞에 있는 테이블 명인 name이 예약어이기 때문.

 

 * 예약어란? 

예약어(豫約語, 영어: reserved word)는 컴퓨터 프로그래밍 언어에서 이미 문법적인 용도로 
사용되고 있기 때문에 식별자로 사용할 수 없는 단어들이다. 
예를 들어 C에서 return은 변수명이나 함수명으로 사용할 수 없다. 그런 단어들은 키워드이다.

 

 

디비 스키마를 짤때 테이블명을 예약어가 아닌걸로 처음부터 정하는게 가장 나은 방법이었겠지만,

이미 다른 부분들에서 쿼리문을 다 짜놓으셨기 때문에 

그 전체를 수정하기보단 내가 짠 쿼리문이 일단 정상적으로 돌아가도록 임시방편으로 작성한 것이다.

 

 

 

내가 쿼리문을 썼던 방식은 백틱 안에 insert문을 입력했었기 때문에 그 안에 큰 따옴표를 넣을 수가 없었다.

작은 따옴표는 입력이 가능하지만 이걸로 예약어를 감싸도 쿼리문 실행이 되지 않았고,

백틱 안에서는 백틱을 다시 쓰는것도 불가능 했음.

 

 

 

💙 해결방법 💙

테이블명에 ` ` (백틱) 을 붙여주고 백틱마다 그 앞에 \ (대쉬)를 붙여준다. 

'INSERT INTO product (\`product_no\`,\`name\`,\`explain\`,creater,\`date\`,likes,\`type\`,total_qty,leftover,symbol,contractAddr,tokenURI) VALUES(?,?,?,?,?,0,?,?,?,?,NULL,NULL)'

주의할 점 : 길다고 줄바꿈하면 안됨. 인식 못함

 

 

 

 

반응형