我正在对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,这里有一些我不知道的东西..我使用的postgres包是 _“github.com/ lib / pq“。我认为这是浮点值的问题,因为如果我将LatMin更改为28它可以工作,但28.1036不会
答案 0 :(得分:0)
大家好我已找到答案,如果您正在收集帖子上的表单信息,如果某些值是decimal,float或double类型,并且您想要将该值查询到数据库中,请使用
r.FormValue("LatMin")
而不是
r.Form["LatMin"]
因为这将获得更正
这两种方法都获得了正确的值,但Form [""]是数据库的问题。