mysql - 我可以在 Go 中参数化 create 语句吗?

标签 mysql go

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

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

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

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

最佳答案

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

也就是说,您只能使用参数来替换原本要使用常量引用字符串、常量引用日期/时间或常量数字的地方。

SQL 查询参数不能用于:

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

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

关于mysql - 我可以在 Go 中参数化 create 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50477597/

相关文章:

json - 将结构编码为 json 时对字段执行操作

mysql - 我需要帮助来确定我的删除语句有什么问题

php - MySQL 查询不返回任何内容

mysql - 创建表时外键约束格式不正确

unit-testing - 在 Golang 中进行单元测试时如何测试是否调用了 goroutine?

go - JSON 解码值被视为 float64 而不是 int

php - 读取excel数据并按以下格式插入

PHP 单个 mySQL 表加上通过单个 HTML 表单未定义数量的多个 mySQL 表条目

regex - 如何维护对多个已编译正则表达式的引用

其他包上的 GORM DB 连接