【发布时间】:2021-05-18 17:53:28
【问题描述】:
这是我要执行的代码:
connection.query({
sql: 'CREATE TABLE ? ( `wage` FLOAT NOT NULL , `monday` FLOAT NOT NULL , `tuesday` FLOAT NOT NULL , `wednesday` FLOAT NOT NULL , `thursday` FLOAT NOT NULL , `friday`) ENGINE = InnoDB;',
timeout: 40000, // 40s
},
//[arg1],
function (error, results, fields) {
if (error) {
console.log("Table creation failed");
}else{
console.log("Table creation success");
}
}
);
这不是一个准备好的语句,因为它需要它并将它放在引号中,这意味着语句看起来像这样:
CREATE TABLE 'test' ( `wage` FLOAT NOT NULL , `monday` FLOAT NOT NULL , `tuesday` FLOAT NOT NULL , `wednesday` FLOAT NOT NULL , `thursday` FLOAT NOT NULL , `friday`) ENGINE = InnoDB;
这是无效的
所以我不得不写这样的语句:
connection.query({
sql: 'CREATE TABLE '+arg1+' ( `wage` FLOAT NOT NULL , `monday` FLOAT NOT NULL , `tuesday` FLOAT NOT NULL , `wednesday` FLOAT NOT NULL , `thursday` FLOAT NOT NULL , `friday` FLOAT NOT NULL) ENGINE = InnoDB;',
timeout: 40000, // 40s
},
//[''],
function (error, results, fields) {
if (error) {
console.log("Table creation failed");
}else{
console.log("Table creation success");
}
}
);
这行得通,但它现在让我面临 SQL 注入,这是我试图避免的。
有什么办法可以解决这个问题并使用准备好的语句?
https://www.npmjs.com/package/mysql - 这是我使用的包
【问题讨论】:
-
不可能将对象名称作为表名或列名作为参数传递,因此您只能使用动态 sql .. 为避免 sqliject,您必须提供适当的字符串纯化 .. 为此 ee 特定功能由您的代码语言提供
-
如果我想传递表名,如何确保它已准备好?
标签: javascript mysql node.js npm