ume*_*ezo 5 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, 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)
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误pq: operator does not exist: integer =?看起来代码不明白它?只是一个占位符.我怎样才能解决这个问题?
mu *_*ort 15
PostgreSQL 本身使用编号占位符($1,, $2...),而不是通常的位置问号.Go接口的文档也在其示例中使用了编号占位符:
rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)
Run Code Online (Sandbox Code Playgroud)
似乎Go接口没有按照许多接口的方式将问号转换为编号的占位符,因此问号一直到达数据库并使所有内容混乱.
您应该能够切换到编号的占位符而不是问号:
row := db.QueryRow(
"SELECT name FROM users WHERE id = $1", id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4321 次 |
| 最近记录: |