我有以下 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。
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消