如何在 SQLX 中执行条件操作
学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《如何在 SQLX 中执行条件操作》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!
问题内容我有数据库存储功能:
func (p *ProductsRep) FindAll(PageNumber int, PaginationSize int, 查询字符串) []*postgresmodels.Product {
此外,我的 SQL 查询如下所示:
SELECT * FROM table_name
。
然后我想连接像 WHERE some_value=3
这样的条件操作,如果存在某个值(在本例中为查询),那么我想从 table_name WHERE some_value=3 获取 SELECT *。
我尝试使用
fmt.Sprintf
进行连接,或 strings.Join
或 bytes.Buffer.WriteString
。但每次我收到此错误时:
我将实际价值替换为理解:
pq:列“某些值”不存在。
如何进行“自适应”查询,这取决于输入的函数值。
解决方案
我相信您正在尝试使用参数查询数据库中的行。
由于存在 sql 注入的潜在风险,您需要确保不会将此数据作为 raw 值传递。您可以使用存储过程进行查询
您可以使用函数 query
来传递带有参数的查询。在示例中,这是 $1
。如果您愿意,可以添加 $2、$3...
等,具体取决于您要查询的参数数量
这里有两个例子
postgres 使用“github.com/jackc/pgx/v4”驱动程序
ctx := context.background()
type bar struct {
id int64
somevalue string
}
rows, err := conn.query(ctx, `select * from main where some_value=$1`, "foo")
if err != nil {
fmt.println("erro")
panic(err) // handle error
}
defer rows.close()
var items []bar
for rows.next() {
var somevalue string
var id int64
if err := rows.scan(&id, &somevalue); err != nil {
log.fatal(err) // handle error
}
item := bar{
id: id,
somevalue: somevalue,
}
items = append(items, item)
}
fmt.println(items)
mysql 驱动程序 https://golang.org/pkg/database/sql/#DB.QueryRow
type Bar struct {
ID int64
SomeValue string
}
rows, err := conn.Query(`SELECT * FROM main WHERE some_value=$1`, "foo")
if err != nil {
fmt.Println("ERRO")
panic(err) // handle error
}
defer rows.Close()
var items []Bar
for rows.Next() {
var someValue string
var id int64
if err := rows.Scan(&id, &someValue); err != nil {
log.Fatal(err) // handle error
}
item := Bar{
ID: id,
SomeValue: someValue,
}
items = append(items, item)
}
fmt.Println(items)
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341