Golang无法将MySQL查询结果追加到结构体切片的问题
问题解决:MySQL查询无结果但Workbench执行正常
你的问题出在SQL语句的语法错误上,MySQL里单引号'是用来定义字符串常量的,不是列名、表名这类标识符的包裹符。
原代码的错误点
看你写的SQL:
SELECT 'description','is_done' FROM tasks WHERE 'user_id' = ?;
'description'和'is_done'不是查询表的列,而是返回两个固定字符串"description"和"is_done";'user_id' = ?是拿字符串"user_id"和传入的userId参数做比较,这两个值永远不相等,自然查不到符合条件的数据。
修正后的代码
把SQL里的单引号去掉(如果列名是关键字,可用反引号`包裹,这里不需要):
query, err := db.Query("SELECT description, is_done FROM tasks WHERE user_id = ?;", userId) if err != nil { return nil, err } defer query.Close() var tasks []TodoUserDTO var currentTask TodoUserDTO for query.Next() { err = query.Scan(¤tTask.Description, ¤tTask.IsDone) if err != nil { panic(err) } tasks = append(tasks, currentTask) } // 补充:遍历结束后检查是否有遍历过程中的错误 if err := query.Err(); err != nil { panic(err) }
额外提醒
- 结构体的
json:"desc"这类tag只影响JSON序列化,和数据库扫描无关,你的结构体定义没问题; - 遍历完结果集后,一定要调用
query.Err()检查是否在遍历过程中出现错误,避免遗漏潜在问题。
内容的提问来源于stack exchange,提问作者Folium
相关产品推荐
相关产品推荐

