当前位置: 首页 > 知识库问答 >
问题:

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

高峻
2023-03-14

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

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

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

有没有一种方法可以使用Go SQL库参数化CREATE语句?

共有1个答案

宰父衡
2023-03-14

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

也就是说,只有在使用常量引用字符串、常量引用日期/时间或常量数字的情况下,才可以使用参数进行替换。

SQL查询参数不能用于:

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

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

 类似资料:
  • 问题内容: 我已经多次使用mysqli_stmt_bind_param函数。但是,如果我分开试图防止SQL注入的变量,则会遇到错误。 这是一些代码示例: 是否有可能以某种方式用另一个问号语句替换串联,制作另一个绑定参数语句或添加到现有的语句中以防止SQL注入? 像这样或某种形式: 问题答案: 对您的问题的简短回答是“否”。 从最严格的意义上讲,在数据库级别,准备好的语句仅允许将参数绑定到SQL语句

  • 问题内容: 我在玩PHP / PDO中准备好的语句。基本查询工作正常,将值传递给WHERE子句: 但是我有一种情况,我需要为字段名称传递变量。此查询(具有适当的绑定)可以正常工作: 这给出了一个错误: 这个不会给出错误,但是不会返回任何行: 那么,哪些事情应该在准备好的语句中起作用?我可以“参数化”字段名称,表名称等吗? 问题答案: 表名和列名不能用PDO中的参数替换。 在这种情况下,您只需要手动

  • 主要内容:可变参数类型,任意类型的可变参数,遍历可变参数列表——获取每一个参数的值,获得可变参数类型——获得每一个参数的类型,在多个可变参数函数中传递参数在C语言时代大家一般都用过 printf() 函数,从那个时候开始其实已经在感受可变参数的魅力和价值,如同C语言中的 printf() 函数,Go语言标准库中的 fmt.Println() 等函数的实现也依赖于语言的可变参数功能。 本节我们将介绍可变参数的用法。合适地使用可变参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。 可变

  • 我正在使用jUnit为访问数据库的应用程序管理集成测试。因为设置测试数据是一个耗时的操作,所以我一直在使用方法,它只在每个测试类中执行一次(而不是方法,它在每个测试方法中运行一次)。 现在,我想尝试数据层配置的几种不同排列,在每个不同的配置上运行我的所有测试。这似乎是测试运行程序的自然使用。问题是,向类构造函数提供参数,方法是抽象的,在类构造函数之前被调用。 几个问题, 是否为每个参数排列调用方法

  • 我想知道是否有可能把代码的这个语句变成一个三元if语句。 我试过这样格式化它--但不认为它很管用。

  • CREATE USER 或 GROUP 语句 创建一个或更多的新用户或组。 语法 建立一个用户: CREATE USER 用户口令 pid [, 用户口令 pid, 匽 建立一个组: CREATE GROUP 组 pid[, 组 pid, 匽 CREATE INDEX 语句可分为以下几个部分: 部分 说明 用户 被加到工作组信息文件的用户名。 组 被加到工作组信息文件的组名。 口令 与特定用户名或