javascript - 当转义值时,Mysql 查询不再起作用

标签 javascript mysql node.js mysqljs

我有一个查询,用于将列添加到我的 Node 服务器中的数据库:

const query = 'ALTER TABLE ' + mysql.escape(tableData[i]) + ' ADD ' + mysql.escape(attributeData[0]) + ' FLOAT DEFAULT NULL;'

如果我使用它们在没有 mysql.escape() 的情况下进行查询,它会按预期添加列。然而,当使用转义函数来防止 SQL 注入(inject)时,它不再起作用。这是为什么?

这是一个使用转义函数的示例查询,它不返回错误,但也不将列添加到表中:

ALTER TABLE '1$0_Test_2018' ADD 'Eigenschaft_3' FLOAT DEFAULT NULL;

这个查询工作得很好,但是我想确保转义用户数据:

ALTER TABLE 1$0_Test_2018 ADD Eigenschaft_3 FLOAT DEFAULT NULL;

最佳答案

看来您的问题可能是转义方法返回用引号而不是反引号括起来的值。

github docs看起来您只需将 escape 更改为 escapeId

If you can't trust an SQL identifier (database / table / column name) because it is provided by a user, you should escape it with mysql.escapeId(identifier)

关于javascript - 当转义值时,Mysql 查询不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575945/

相关文章:

javascript - OnClick 按钮在 Rails 中创建一个动态 div(使用 java 脚本或 jQuery)

c# - BackgroundWorker 问题(C# Windows 窗体)

node.js - 创建一个 Ember CLI in-app/in-repo Addon : how to install npm dependencies?

javascript - 理解 module.exports 与回调

javascript - react-bootstrap 设置 FormControl 的值

javascript - 从数组组中删除多个对象

python - 尝试在 python 中上传到 MySQL 数据库时出现完整性错误

mysql - gem mysql2 gem 未加载

node.js 通过 aws-sdk 模块重命名 s3 对象

javascript - toLocaleDateString 的相反方法