首页 > 解决方案 > 如何在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');

标签: sqlnode.jsexpress

解决方案


表名和列名无法参数化,原因与您无法在编程语言中对变量名进行参数化类似;它们是程序固定结构的一部分。如果允许对表名和列名进行参数化,那么当您提前知道输入和输出数据的结构时可能进行的一些优化将不再可行

你唯一能做的就是在一个字符串中构造你的 SQL,使用连接,并以这种方式执行它。这样做时要特别小心;不允许潜在的敌对用户提供您连接到字符串中的任何值,而无需先检查其有效性


推荐阅读