Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;运算符不存在:整数=?“;使用Postgres时_Sql_Postgresql_Go_Pq - Fatal编程技术网

Sql &引用;运算符不存在:整数=?“;使用Postgres时

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

我在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, 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驱动程序的文档也值得一读(不仅仅是美元问题):