一尘不染

“运算符不存在:整数=?” 使用Postgres时

go

我有一个简单的SQL查询,该查询在go的数据库/ sql软件包提供的QueryRow方法内。

import (
  "github.com/codegangsta/martini"
  "github.com/martini-contrib/render"
  "net/http"
  "database/sql"
  "fmt"
  _ "github.com/lib/pq")
)

type User struct {
  Name string
}

func Show(db *sql.DB, params martini.Params) {
  id := params["id"]
  row := db.QueryRow(
    "SELECT name FROM users WHERE id=?", id)
  u := User{}
  err := row.Scan(&u.Name)
  fmt.Println(err)
}

但是,我收到错误消息pq: operator does not exist: integer =?看来代码不明白那个?仅仅是一个占位符。我怎样才能解决这个问题?


阅读 282

收藏
2020-07-02

共1个答案

一尘不染

PostgreSQL
本机使用带编号的占位符($1$2…),而不是通常的位置问号。Go接口文档在其示例中还使用了数字占位符:

rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)

似乎Go接口没有像许多接口那样将问号转换为带编号的占位符,因此问号一直到数据库,并使所有内容混乱。

您应该能够切换到带编号的占位符而不是问号:

 row := db.QueryRow(
    "SELECT name FROM users WHERE id = $1", id)
2020-07-02