我有一个简单的选择语句:
Select * FROM X where X.name in ("bob", "joe") and X.phone='123'
在postgres中很好用,
在我的Go代码中,我有以下代码:
var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in ($1) and X.phone=$2`
rows, sqlerr := db.Query(sqlStatement, names, phone)
但是由于某种原因,我从该sql中出错了。
不受支持的扫描,将driver.Value类型存储为* string
类型
我如何在sqlstatement旁边使用我的名称数组?
注意:如果我执行fmt.printf并将sql语句粘贴到postgres中,则我会获取数据+如果我取出$ 1,并手动输入字符串
答案 0 :(得分:2)
从一些有效的Go PostgreSQL代码中复制和粘贴片段:
import (
"database/sql"
"github.com/lib/pq"
)
query := `
. . .
WHERE code = ANY($1)
. . .
`
codes := []string{"JFK", "LGA", "EWR"}
rows, err := db.Query(query, pq.Array(codes))
答案 1 :(得分:0)
我用http://jmoiron.github.io/sqlx/#inQueries
解决了这个问题var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in (?) and X.phone=?`
sqlStatement, args, err := sqlx.In(sqlStatement, names, phone)
sqlStatement = db.Rebind(sqlStatement)
rows, sqlerr := db.Queryx(sqlStatement, args...)
现在可以正确返回。
解决此问题的另一种方法是使用fmt.Sprintf()
并将?
转换为%s