为了账号安全,请及时绑定邮箱和手机立即绑定

在golang中参数化SQL子查询

在golang中参数化SQL子查询

Go
慕尼黑5688855 2022-11-08 15:10:46
请考虑这个问题。我需要在 golang 中参数化一个 SQL(子)查询。请考虑下面的伪代码或https://go.dev/play/p/F-jZGEiDnsd详细hayStack信息以字符串切片形式提供给我,lookIn并且可能会有所不同。我需要在所有这些干草堆中寻找%eedl%(针)。评论中的代码是我目前处理它的方式 - 我只参数化needle我正在寻找的。我如何参数化hayStacks?package mainimport "fmt"func main() {    fmt.Println("Hello, 世界")    lookIn := []string{"hayStack.1", "hayStack.2", "hayStack.3", "hayStack.4", "hayStack.5"}    needle := "eedl"    needle = "%" + needle + "%"    for i := range lookIn {        fmt.Println("lookIn", lookIn[i])    }    fmt.Println("needle", needle)    /* this is how I currently do         txt := `select needle,tagTitle,Epoch from ( select needle,tagTitle,Epoch where hayStackName = "hayStack.1" or hayStackName = "hayStack.2" or hayStackName = "hayStack.3" or hayStackName = "hayStack.3" or hayStackName = "hayStack.4" or hayStackName = "hayStack.5" )  where tagTitle like ? order by tagTitle COLLATE NOCASE ASC ;`        rows, err := sqliteDbPtr.Query(txt, needle)        if err != nil {            if err != sql.ErrNoRows {                checkErr(err)                panic(err)            }            return        }        defer rows.Close()    */}任何输入将不胜感激。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

仅使用标准库,您可以将 haystack 参数和 needle 参数收集到一个切片中,然后将其传递给Query方法。


对于 SQL 本身,您可以使用IN运算符并将其右侧操作数生成为?基于干草堆数量的列表。


args := make([]interface{}, len(lookIn)+1) // slice of all args

inRHS := "" // string of ?,... for the IN operator's right hand side

for i := range lookIn {

    args[i] = lookIn[i]

    inRHS += "?,"

}

args[len(args)-1] = needle   // add the last arg

inRHS = inRHS[:len(inRHS)-1] // remove last ","

query := `SELECT needle,tagTitle,Epoch

FROM some_table

WHERE hayStackName IN (` + inRHS + `)

AND tagTitle LIKE ?

ORDER BY tagTitle COLLATE NOCASE ASC`


rows, err := sqliteDbPtr.Query(query, args...)

if err != nil {

    // handle error

}

defer rows.Close()


for rows.Next() {

    //

}

if err := rows.Err(); err != nil {

    //

}

请注意,我已删除子查询并添加了FROM some_table您的问题缺少的子句。


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号