【发布时间】:2021-07-24 15:29:19
【问题描述】:
以下代码引起了一些麻烦。我正在尝试创建一个函数,该函数将创建一个令牌并检查一个特定的表是否匹配。查询运行时我收到此错误消息。
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your
MariaDB
server version for the right syntax to use near ''comps' WHERE 'compUUID' = 'gDnn58MU5vAP1GxhP0LgOGToJQUrXmQhtZqbQvwDpqmqGbIY9B4F' at line 1
这是代码
function genToken(table, col, length) {
let finalGen;
generator()
function generator() {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
if (i + 1 === length) {
db.query("SELECT ? FROM ? WHERE ? = ?", [col, table, col, result], (err, results) => {
if (err) {
console.log(err)
} else {
if (results.length > 0) {
generator()
} else {
finalGen = result
}
}
})
}
}
}
return finalGen
}
【问题讨论】:
-
您不能将标识符(列名和表名)作为 SQL 参数传入。您必须修改查询字符串才能将它们放入。
-
我将这个问题链接到一个老问题,我用一个如何使用 mysqljs 库传递标识符的示例回答了这个问题。他们使用了一个技巧——它不是传统意义上的查询参数,他们只是将标识符名称复制到查询中,但他们这样做是安全的。
标签: javascript mysql sql node.js