Postgres 无法确定 Golang 应用程序中参数 $1 的数据类型
Postgres could not determine data type of parameter $1 in Golang application
我正在 Golang 中创建一个应用程序,该应用程序使用 pq 驱动程序使用 Postgres。我想创建一个函数,可以 select 来自我的数据库的用户确定的字段,但我得到一个错误:
pq: could not determine data type of parameter
下面是生成此错误的代码:
var ifc interface{}
if err := conn.QueryRow("SELECT FROM "+db+" WHERE uuid= OR uri= LIMIT 1", field, UUIDOrURI, UUIDOrURI).Scan(&ifc); err != nil {
if err == sql.ErrNoRows {
return http.StatusNotFound
}
log.Println(err)
return http.StatusInternalServerError
}
为什么我不能使用 </code> 插入我想要 <code>SELECT
的字段?还有其他方法吗?
字段名称不能使用占位符。您必须直接构建查询,如:
"SELECT `" + field + "` FROM "
为避免 SQL 注入,请事先确保该字段是允许字段列表的一部分。
恕我直言,创建 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并且效果很好。
我正在 Golang 中创建一个应用程序,该应用程序使用 pq 驱动程序使用 Postgres。我想创建一个函数,可以 select 来自我的数据库的用户确定的字段,但我得到一个错误:
pq: could not determine data type of parameter
下面是生成此错误的代码:
var ifc interface{}
if err := conn.QueryRow("SELECT FROM "+db+" WHERE uuid= OR uri= LIMIT 1", field, UUIDOrURI, UUIDOrURI).Scan(&ifc); err != nil {
if err == sql.ErrNoRows {
return http.StatusNotFound
}
log.Println(err)
return http.StatusInternalServerError
}
为什么我不能使用 </code> 插入我想要 <code>SELECT
的字段?还有其他方法吗?
字段名称不能使用占位符。您必须直接构建查询,如:
"SELECT `" + field + "` FROM "
为避免 SQL 注入,请事先确保该字段是允许字段列表的一部分。
恕我直言,创建 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并且效果很好。