我正在对 postgres 数据库执行 Golang 查询,奇怪的是查询仅在我硬编码值时有效,例如此查询有效
db.QueryRow("select json_build_object('Streams', array_to_json(array_agg(t))) from (select p.name FROM profiles as p INNER JOIN streams as s ON(s.profile_id =
p.id) WHERE s.latitudes >=28.1036 AND shared = false order by id desc limit 15)t").Scan(&result)
我现在唯一改变的部分是 WHERE s.latitudes >=28.1036 我没有将该值硬编码,而是通过表单传递它,现在有了这样的查询
db.QueryRow("select json_build_object('Streams', array_to_json(array_agg(t))) from (select p.name FROM profiles as p INNER JOIN streams as s ON(s.profile_id =
p.id) WHERE s.latitudes>=$1 AND shared = false order by id desc limit 15)t",LatMin).Scan(&result)
现在查询返回 null,我确实知道 LatMin 变量被正确填充,因为这是我的代码
func Auto_Location(w http.ResponseWriter, r *http.Request) {
var result string
if r.Method == "GET" {
} else {
r.ParseForm() }
LatMin := r.Form["LatMin"]
db,err := sql.Open("Postgres Connects")
if err != nil {
log.Fatal(err)
println(err)
}
db.QueryRow("select json_build_object('Streams', array_to_json(array_agg(t))) from (select p.name FROM profiles as p INNER JOIN streams as s ON(s.profile_id =
p.id) WHERE s.latitudes>=$1 AND shared = false order by id desc limit 15)t",LatMin).Scan(&result)
defer db.Close()
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w,result)
fmt.Println("Value:", LatMin)
}
同样,正如您从代码中看到的那样,我正在使用 FMT,而 LatMin 的正确值为 28.1036库/pq" 。我认为这是浮点值的问题,因为如果我将 LatMin 更改为 28 它会起作用,但 28.1036 不会
最佳答案
大家好,我已经找到答案了,如果您正在收集有关 Post 的表单信息,并且如果某些值是 decimal、float 或 double 类型,并且您想将该值查询到数据库中,那么请使用
r.FormValue("LatMin")
代替
r.Form["LatMin"]
因为这样会得到正确的结果
这两种方法都获得了正确的值,但是 Form[""] 是数据库的问题。
关于具有浮点值的 Golang 查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173222/