Postgres无法确定Golang应用程序

时间:2016-10-05 10:15:16

标签: sql database postgresql go pq

我在Golang中使用pq驱动程序创建一个使用Postgres的应用程序。我想创建一个可以从我的数据库中选择用户确定的字段的函数,但是我收到一个错误:

  

pq:无法确定参数$ 1的数据类型

以下是生成此错误的代码:

var ifc interface{}

if err := conn.QueryRow("SELECT $1 FROM "+db+" WHERE uuid=$3 OR uri=$4 LIMIT 1", field, UUIDOrURI, UUIDOrURI).Scan(&ifc); err != nil {
    if err == sql.ErrNoRows {
        return http.StatusNotFound
    }

    log.Println(err)

    return http.StatusInternalServerError
}

为什么我不能使用SELECT插入我想要的$1字段?还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

您不能将占位符用于字段名称。您必须直接构建查询,如:

"SELECT `" + field + "` FROM "

为避免SQL注入,请确保该字段事先是允许字段列表的一部分。

答案 1 :(得分:-3)

恕我直言,创建SQL查询更简单但不安全的方法是使用fmt.Sprintf:

query := fmt.Sprintf("SELECT %s FROM %s WHERE uuid=%s", field, db, UUIDOrURI)
if err := conn.QueryRow(query).scan(&ifc); err != nil {

}

您甚至可以指定参数索引:

query := fmt.Sprintf("SELECT %[2]s FROM %[1]s", db, field)

为了简化开发,我建议使用一个包用于postgresql通信,我尝试this one并且工作得很好。