如何参数化运算符?

我有以下 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 main


import (

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

        }

    }


}


哆啦的时光机
浏览 164回答 1
1回答

德玛西亚99

准备好的语句允许参数化值,仅此而已。从一开始就对运算符进行参数化是没有意义的,在不知道所涉及的运算符的情况下无法准备语句。这将是潜在的危险,为 SQL 注入打开向量。要切换运算符,您必须在客户端连接一个新的查询字符串,或者使用带有服务器端过程语言的动态 SQL,默认为 plpgsql。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go