我有一个简单的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 =?看来代码不明白那个?仅仅是一个占位符。我怎样才能解决这个问题?
pq: operator does not exist: integer =?
?
PostgreSQL 本机使用带编号的占位符($1,$2…),而不是通常的位置问号。Go接口的文档在其示例中还使用了数字占位符:
$1
$2
rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)
似乎Go接口没有像许多接口那样将问号转换为带编号的占位符,因此问号一直到数据库,并使所有内容混乱。
您应该能够切换到带编号的占位符而不是问号:
row := db.QueryRow( "SELECT name FROM users WHERE id = $1", id)