sql - 如何在sql查询中进行表名的动态分配?
问题描述
在express js应用程序中,是否可以动态分配表的名称?
代码如下
let table_name = 'fields'
await connection.query(`INSERT INTO ? (name,description) values ('user','user field')`);
这会在 sql 语法中产生错误,因为执行的查询在表名周围有引号,就像这样。
INSERT INTO 'fields' (name,description) values ('user','user field');
解决方案
表名和列名无法参数化,原因与您无法在编程语言中对变量名进行参数化类似;它们是程序固定结构的一部分。如果允许对表名和列名进行参数化,那么当您提前知道输入和输出数据的结构时可能进行的一些优化将不再可行
你唯一能做的就是在一个字符串中构造你的 SQL,使用连接,并以这种方式执行它。这样做时要特别小心;不允许潜在的敌对用户提供您连接到字符串中的任何值,而无需先检查其有效性
推荐阅读
- java - 如何使用 AsyncHttpClient 构建 URL?
- python-3.x - 从两个不同的数据集创建数据集
- java - 如何将项目作为依赖项添加到我的 common.gradle?
- php - 问题完整性约束违规:1048列
- swift - WKExtension.shared().delegate = self 现在显示无法分配给属性:'delegate' 是仅获取属性
- mysql - 如何从 SQL 子查询返回数组?
- java - 将素数总和 Python 代码转换为 Java 代码
- java - Jackson Mixin 不能在 Pojo 中工作到 json
- java - 如何在我的代码中添加与 Timer 一起使用的 JProgressBar?
- android - 如何提出多个截击请求?