Golang Go语言中gorm 使用原生 sql 如何不定参数查询?

Golang Go语言中gorm 使用原生 sql 如何不定参数查询?
null

11 回复

db.Raw("SELECT * FROM kd_online_edit_file WHERE aaa = ? and bbb = ? ", aaa, bbb).Find(&result)

更多关于Golang Go语言中gorm 使用原生 sql 如何不定参数查询?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


if columen != “” 模式

go<br>func (m SshLogQ) Search(u *User) (list *[]SshLog, total uint, err error) {<br> list = &amp;[]SshLog{}<br> tx := db.Model(m.SshLog).Preload("User").Preload("Machine")<br> if m.ClientIp != "" {<br> tx = tx.Where("client_ip like ?", "%"+m.ClientIp+"%")<br> }<br> if m.FromTime != "" &amp;&amp; m.ToTime != "" {<br> tx = tx.Where("`created_at` BETWEEN ? AND ?", m.FromTime, m.ToTime)<br> }<br><br> if u.IsAdmin() {<br> if m.UserId &gt; 0 {<br> tx = tx.Where("user_id = ?", m.UserId)<br> }<br> if m.MachineId &gt; 0 {<br> tx = tx.Where("machine_id = ?", m.MachineId)<br> }<br> } else {<br> //非管理员 智能看自己的日志<br> //不支持搜索搜索<br> tx = tx.Where("`user_id` = ?", <a target="_blank" href="http://u.Id" rel="nofollow noopener">u.Id</a>)<br> }<br> total, err = crudAll(&amp;m.PaginationQ, tx, list)<br> return<br>}<br>

是这样的
我不知道前端到底有没有传查询的条件
若传了查询的条件=>sql 加上"where xxx = xxx "
https://blog.csdn.net/linux_player_c/article/details/82351934 这里可以参考一下,不过是用 orm 的
原生的 sql 怎么写

#3 gorm 只是帮你拼了 sql,原生就自己 if else 拼 sql 串

用 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)

给你一个思路,where 条件为数组,当一个条件存在写入数组,最后 for db.where



我可以自己拼字符串


我可以自己拼字符串
但是 sql += " and xxx = " + “xxx”


这样不会 sql 注入吗

#9 用绑定参数的 sql 啊。。。 WHERE aaa = ? and bbb = ? 拼这种 不是拼 value

在Golang中使用GORM库时,如果需要通过原生SQL执行不定参数查询,你可以利用GORM的Raw方法结合?占位符以及sql.NamedArg[]interface{}类型的参数来实现。

以下是一个示例,展示了如何使用原生SQL和不定参数进行查询:

package main

import (
    "fmt"
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
    "database/sql"
)

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 假设有一个users表
    db.AutoMigrate(&User{})

    // 使用原生SQL和不定参数查询
    var users []User
    ids := []int{1, 2, 3} // 不定参数示例
    query := "SELECT * FROM users WHERE id IN (?)"
    for range ids {
        query += ",?"
    }
    query = query[0 : len(query)-1] // 去掉最后一个多余的逗号
    db.Raw(query, ids...).Scan(&users)

    for _, user := range users {
        fmt.Println(user)
    }
}

type User struct {
    ID   int
    Name string
}

注意,上述代码在处理IN子句时手动拼接了占位符。这种方法在参数数量不固定时较为实用,但需要小心SQL注入风险。GORM本身并未提供直接处理不定数量IN子句参数的便捷方法,因此这种手动拼接是常见的做法。确保输入参数经过验证或清理,以避免安全风险。

回到顶部