Gorm에서 IN 문장에 오류가 발생했을 때의 해결 방법 사용

Gorm에서 IN을 사용하는 경우


IN 문장stringslice형을 사용할 때 ?의 부분을 괄호로 묶지 않으면 SQL 문법 오류가 발생한다.

오류


[2021-10-17 08:00:06]  Error 1064: 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 '?,?,?,?,?,?,?)' at line 1 

(/app/infra/mysql/t_works.go:21) 
[2021-10-17 08:00:06]  [0.50ms]  SELECT * FROM `t_works`  WHERE (uuid IN 'ayT26n5uOBJVRS','RbfnBB3DQQrVXbQns1','dCaElk4mrpjph6rx2','8nKhTk9dFI5A','1EkmFP2imIso23','vGrj5RVqw3EoeF7vSGg','ygx8ffvUsywB4Vy')  
[0 rows affected or returned ] 

before (오류 발생 코드)


func FetchWorksByUUIDs(uuids []string) ([]models.Work, error) {
	works := []models.Work{}
 // 中略
	db.Where("uuid IN ?", uuids).Find(&works)
}

대응 조치: 봉화 63?괄호로 묶다


func FetchWorksByUUIDs(uuids []string) ([]models.Work, error) {
	works := []models.Work{}
 // 中略
	db.Where("uuid IN (?)", uuids).Find(&works)
}

최후


https://gorm.io/docs/query.html
공식은 별도(?)그렇습니까?쓰지 않고 ()로 동그라미를 쳐서 막았다.
※ 차라리 슬라이스를 IN 조건에 직접 포함시키는 것이 일반적이어서 따랐습니다.
 
그래서 상술한 SQL 문법 오류가 발생하여 약간 조사, 분석을 하여 최종적으로 자기 해결에 이르렀다.
왜냐하면 인터넷에서 이 오류를 당해서 글을 쓰는 사람을 못 봤어요.
같은 오류가 있는 사람을 위해 기사를 쓰는 게 좋을 것 같아서 기사를 썼어요.
 
gorm log mode를 진짜로 만들어서 해결했어요!최고!
개발 과정에서 이날 로그 모드를 진짜로 설정하겠다고 다시 한 번 맹세했다.
	db.LogMode(true)

좋은 웹페이지 즐겨찾기