在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');
答案 0 :(得分:0)
表名和列名不能被参数化,原因类似,您不能用编程语言来参数化变量名。它们是程序固定结构的一部分。如果允许对表名和列名进行参数化,那么当您事先知道输入和输出数据的结构时,可能会进行一些优化
您唯一可以做的就是使用串联将SQL构造为字符串,然后以这种方式执行它。这样做时要格外小心;不允许潜在敌对用户提供您连接到字符串中的任何值,而无需先检查其有效性