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

如何参数化运算符?

如何参数化运算符?

Go
哆啦的时光机 2021-10-18 15:00:51
我有以下 sql 语句:SELECT pk, up FROM mytable WHERE 2 > 1 LIMIT 10显然,这只是为了简单起见。我能够参数化任何整数:SELECT pk, up FROM mytable WHERE 2 > $1 LIMIT 10但是,当我尝试参数化运算符时,例如:SELECT pk, up FROM mytable WHERE 2 $1 1 LIMIT 10我得到:pq: syntax error at or near "$1"完整代码:package mainimport (    "database/sql"    _ "github.com/lib/pq"    "log")func main() {    log.SetFlags(log.Lshortfile)    Db, err := sql.Open("postgres", "user=yoitsmeletmein password=supersecretyo host=what.a.host dbname=mydb sslmode=require")    if err != nil {        log.Fatal("Cannot connect to db: ", err)    }    q := `SELECT pk FROM mytable WHERE 2 $1 1 LIMIT 10`    params := []interface{}{">"}    rows, err := Db.Query(q, params...)    if err != nil {        log.Println(err)    } else {        defer rows.Close()        for rows.Next() {            var pk int64            if err := rows.Scan(&pk); err != nil {                log.Fatal(err)            }            log.Println(pk)        }    }}
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

准备好的语句允许参数化,仅此而已。从一开始就对运算符进行参数化是没有意义的,在不知道所涉及的运算符的情况下无法准备语句。这将是潜在的危险,为 SQL 注入打开向量。

要切换运算符,您必须在客户端连接一个新的查询字符串,或者使用带有服务器端过程语言的动态 SQL,默认为 plpgsql。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信