如何参数化运算符?
How do I parametarize an operator?
我有以下 sql 声明:
SELECT pk, up FROM mytable WHERE 2 > 1 LIMIT 10
显然,这只是为了简单起见。我能够参数化任何整数:
SELECT pk, up FROM mytable WHERE 2 > LIMIT 10
但是,当我尝试参数化运算符时,例如:
SELECT pk, up FROM mytable WHERE 2 1 LIMIT 10
我得到:
pq: syntax error at or near ""
完整代码:
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 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)
}
}
}
准备好的语句允许参数化 values,没有别的。从一开始就参数化运算符是没有意义的,如果不了解所涉及的运算符就无法准备语句。这将有潜在的危险,为 SQL 注入打开载体。
要切换运算符,您必须在客户端中连接新的查询字符串或使用动态SQL使用服务器端过程语言,默认为 plpgsql。
我有以下 sql 声明:
SELECT pk, up FROM mytable WHERE 2 > 1 LIMIT 10
显然,这只是为了简单起见。我能够参数化任何整数:
SELECT pk, up FROM mytable WHERE 2 > LIMIT 10
但是,当我尝试参数化运算符时,例如:
SELECT pk, up FROM mytable WHERE 2 1 LIMIT 10
我得到:
pq: syntax error at or near ""
完整代码:
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 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)
}
}
}
准备好的语句允许参数化 values,没有别的。从一开始就参数化运算符是没有意义的,如果不了解所涉及的运算符就无法准备语句。这将有潜在的危险,为 SQL 注入打开载体。
要切换运算符,您必须在客户端中连接新的查询字符串或使用动态SQL使用服务器端过程语言,默认为 plpgsql。