为了账号安全,请及时绑定邮箱和手机立即绑定

在不使用 fmt 的情况下生成 Sql 选择查询。Sprintf

在不使用 fmt 的情况下生成 Sql 选择查询。Sprintf

Go
jeck猫 2022-08-24 20:26:15
长话短说,我想用预准备语句或其他任何东西来更改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)


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信