gorm 使用原生 sql 如何不定参数查询?

2019-09-05 10:40:40 +08:00
 252748371
6493 次点击
所在节点    Go 编程语言
10 条回复
leon0903
2019-09-05 12:11:58 +08:00
db.Raw("SELECT * FROM kd_online_edit_file WHERE aaa = ? and bbb = ? ", aaa, bbb).Find(&result)
not4jerk
2019-09-05 13:20:08 +08:00
if columen != "" 模式

```go
func (m SshLogQ) Search(u *User) (list *[]SshLog, total uint, err error) {
list = &[]SshLog{}
tx := db.Model(m.SshLog).Preload("User").Preload("Machine")
if m.ClientIp != "" {
tx = tx.Where("client_ip like ?", "%"+m.ClientIp+"%")
}
if m.FromTime != "" && m.ToTime != "" {
tx = tx.Where("`created_at` BETWEEN ? AND ?", m.FromTime, m.ToTime)
}

if u.IsAdmin() {
if m.UserId > 0 {
tx = tx.Where("user_id = ?", m.UserId)
}
if m.MachineId > 0 {
tx = tx.Where("machine_id = ?", m.MachineId)
}
} else {
//非管理员 智能看自己的日志
//不支持搜索搜索
tx = tx.Where("`user_id` = ?", u.Id)
}
total, err = crudAll(&m.PaginationQ, tx, list)
return
}
```
252748371
2019-09-05 16:08:55 +08:00
是这样的
我不知道前端到底有没有传查询的条件
若传了查询的条件=>sql 加上"where xxx = xxx "
https://blog.csdn.net/linux_player_c/article/details/82351934 这里可以参考一下,不过是用 orm 的
原生的 sql 怎么写
liuxey
2019-09-05 16:18:27 +08:00
@252748371 #3 gorm 只是帮你拼了 sql,原生就自己 if else 拼 sql 串
pubby
2019-09-05 16:22:59 +08:00
用 gorm.Expr

var wCond = gorm.Expr("1")
if xx && oo {
wCond = gorm.Expr("xx=? AND oo=?",xx,oo)
}
db.Raw("SELECT * FROM table1 WHERE ?", wCond).Scan(&rows)
jss
2019-09-05 21:56:44 +08:00
给你一个思路,where 条件为数组,当一个条件存在写入数组,最后 for db.where
252748371
2019-09-06 11:03:37 +08:00
@liuxey

我可以自己拼字符串
252748371
2019-09-06 11:04:34 +08:00
@liuxey
我可以自己拼字符串
但是 sql += " and xxx = " + "xxx"
252748371
2019-09-06 11:05:01 +08:00
@liuxey
这样不会 sql 注入吗
liuxey
2019-09-07 18:54:59 +08:00
@252748371 #9 用绑定参数的 sql 啊。。。 WHERE aaa = ? and bbb = ? 拼这种 不是拼 value

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/598125

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX