Sql &引用;运算符不存在:整数=?“;使用Postgres时
我在go的database/SQL包提供的QueryRow方法中调用了一个简单的SQL查询Sql &引用;运算符不存在:整数=?“;使用Postgres时,sql,postgresql,go,pq,Sql,Postgresql,Go,Pq,我在go的database/SQL包提供的QueryRow方法中调用了一个简单的SQL查询 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
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不存在:integer=?
看起来代码不理解?
只是一个占位符。如何解决此问题?PostgreSQL使用带编号的占位符($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)
得到该特定错误的原因是
=?
将是一个有效的PostgreSQL运算符名称。使用id=?
。但正如mu所说,Go可能也没有使用?
作为占位符。明白了,谢谢。我没有意识到这一点,因为数据库/sql的go文档使用问号。umezo:我相信你已经去过了,但是你的postgresql驱动程序的文档也值得一读(不仅仅是美元问题):