MySQL 报错:Prepared statement contains too many placeholders 解决
通过报警遇到一个接口报错,具体报错信息是
failed: users get one failed: Error 1390 (HY000): Prepared statement contains too many placeholders 根据报警日志,找到对应代码位置(DAO 层代码,业务无关):
func (userDAO) GetAllByUserIds(ctx context.Context, uids []int) ([]model.User, error) { dbSession := dbConn.WithContext(ctx) var users []model.User err := dbSession.Model(&model.User{}).Where("id in ?", uids).Find(&users).Error return users, err } 定位到问题代码,发现 uids 是一个切片,里面存放了 16w 个用户 id,sql 用的 in 语句
Posted by jsharkc on Thursday, May 23, 2024