【问题标题】:SQL Error when trying to dynamically read from table [duplicate]尝试从表中动态读取时出现 SQL 错误 [重复]
【发布时间】: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


【解决方案1】:

“您不能将标识符(列名和表名)作为 SQL 参数传入。您必须修改查询字符串才能将它们放入”

感谢戈登·林诺夫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多