我可以在Go中参数化一个create语句吗?

时间:2018-05-22 23:04:06

标签: mysql go

使用Go SQL库,我们可以使用以下参数创建SELECT,INSERT,UPDATE和DELETE语句:

db.Query("SELECT * FROM database.table WHERE param = ?", param_value)

我想从描述表结构的用户提供的输入创建表,将要求用户输入表的名称以及他们想要创建的每列的名称和类型。但是,在查询接口中构建CREATE语句通过将字符串连接在一起创建CREATE语句可以正常工作,但这是一个等待发生的SQL注入攻击。

有没有办法使用Go SQL库来参数化CREATE语句?

1 个答案:

答案 0 :(得分:5)

SQL查询参数仅取代标量值。

也就是说,您可以使用参数替换仅使用常量引用字符串,常量引用日期/时间或常量数字的位置。

SQL查询参数不能用于:

  • 表名,列名或其他标识符
  • SQL表达式
  • 标量值列表(如IN(...)谓词中所示)
  • SQL关键字

编写描述表结构的用户输入的应用程序的正确方法是将用户输入解释为指南,而不是文字SQL语法。避免传递用户输入(或任何不安全的内容)作为任何SQL语句的一部分执行。