当前位置: 首页 > 面试题库 >

具有表名bindvar的Postgres sqlx准备的语句

郑嘉悦
2023-03-14
问题内容

我正在尝试使用Golang sqlx库创建准备好的语句。我想让表名成为bindVar

stmt, err := stmtTx.Preparex("SELECT * FROM $1 WHERE question_id=$2;")

但是,这给了我一个语法错误/$1/。我可以不使用绑定变量作为表名吗?


问题答案:

我可以不使用绑定变量作为表名吗?

不,报价来源。

参数只能用作数据值,不能用作标识符。因此,例如,这是合理的:

INSERT INTO mytable VALUES ($1);

但这不起作用:

INSERT INTO $1 VALUES (42);

但是,如果需要,可以使用fmt.Sprintf表名,而将$ 1,$ 2,…保留为数据值。



 类似资料:
  • 问题内容: 引用MySQL INSERT手册-UPDATE也一样: 使用关键字DEFAULT可以将列明确设置为其默认值。这使编写INSERT语句(为少数几个列分配值)更加容易,因为它使您避免编写不完整的VALUES列表,该列表不包含表中每个列的值。否则,您将不得不写出与VALUES列表中的每个值相对应的列名列表。 简而言之,如果我写 插入新的一列,并将column2设置为其默认值(无论它是多少)。

  • 问题内容: 我正在尝试使用准备好的语句来设置表名称以从中选择数据,但是在执行查询时,我总是收到错误消息。 错误和示例代码如下所示。 有什么想法可能会导致这种情况? 问题答案: 表名不能用作参数。它必须是硬编码的。因此,您可以执行以下操作:

  • 问题内容: 我正在尝试使用准备好的语句来设置表名以从中选择数据,但是执行查询时,我总是收到错误消息。 错误和示例代码如下所示。 有什么想法可能导致这种情况? 问题答案: 表名不能用作参数。它必须是硬编码的。因此,你可以执行以下操作:

  • 问题内容: 我想知道是否仍然可以使用准备好的语句指定返回的列名称。 我正在使用MySQL和Java。 当我尝试时: 我得到了这种类型的语句(在执行之前立即打印)。 但我希望看到: 我知道,我不能为表名这样做,因为讨论 这里,但不知道是否有一些方法来做到这一点对列名。 如果没有,那么我只需要尝试确保对输入进行清理,以免导致SQL注入漏洞。 问题答案: 这表明数据库设计不正确。用户不需要知道列名。创建

  • 问题内容: 这可能吗?例如 如果没有,我应该这样做吗: 还是我需要学习其他技巧? 问题答案: 表名和列名不能用PDO中的参数替换。请参见PHP PDO语句可以接受表名或列名作为参数吗?