长话短说,我想用预准备语句或其他任何东西来更改sql查询的选择部分,而不是使用,因为我不希望用户输入直接进入查询。fmt.Sprintf我正在尝试根据用户的请求从数据库中选择两个特定的列。如果我像这样对列名进行硬编码,它工作得很好(我简化了这个问题的查询):query := `SELECT m.first_name, m.created_atFROM member AS mINNER JOIN device AS d ON d.member_id = m.member_id`WHERE m.member_id = ?但是,如果我使用此查询,则不起作用:query := `SELECT m.?, m.created_atFROM member AS mINNER JOIN device AS d ON d.member_id = m.member_id`WHERE m.member_id = ?对于这两个查询,我都使用了 *sql。分贝。用于用参数绑定占位符的 QueryContext:。在查看了sql驱动程序中的所有示例代码后,我意识到我无法将select部分与预准备语句中的参数动态绑定(如果我错了,请纠正我)。我以为这有效 ?在条件中标记。db.QueryContext(ctx, query, args)在数据库/sql 包中,有没有更好的方法来动态构建 Sql Select 部分,而无需直接在查询中使用用户输入?
1 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
不能以这种方式使用占位符,而不能仅替换列名或表名以外的值
查看 http://go-database-sql.org/prepared.html
MySQL PostgreSQL Oracle
===== ========== ======
WHERE col = ? WHERE col = $1 WHERE col = :col
VALUES(?, ?, ?) VALUES($1, $2, $3) VALUES(:val1, :val2, :val3)
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消