javascript - 我们可以在 sql 中将对象作为参数传递给数组,以防止使用 promise-mysql 模块在 nodejs 中注入 sql
问题描述
我想将对象传递给 SQL 查询。
我知道这有效:
connection.query('SELECT * FROM projects WHERE status = ?',
['active']
)
使用命名对象属性作为参数的正确语法是什么?像这样的东西:
connection.query('SELECT * FROM projects WHERE status = :status ',
{ status: 'active' }
)
解决方案
这种可能性不是开箱即用的,但是 mysqljs 的文档(promise-mysql 依赖)解释了如何通过将自定义函数分配给来实现connection.config.queryFormat
:
如果您更喜欢使用另一种类型的查询转义格式,可以使用连接配置选项来定义自定义格式函数。如果要使用内置的 .escape() 或任何其他连接函数,则可以访问连接对象。
下面是如何实现另一种格式的示例:
connection.config.queryFormat = function (query, values) { if (!values) return query; return query.replace(/\:(\w+)/g, function (txt, key) { if (values.hasOwnProperty(key)) { return this.escape(values[key]); } return txt; }.bind(this)); }; connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });
推荐阅读
- apache-poi - 无法解析符号“AbstractJExcelView”
- windows - 如何在windows命令行通过sc.exe创建服务时将参数传递给可执行文件
- python - Linux 上的 Python 3 字符编码
- php - 输出中的 if 语句
- api - 如何解决大日历上的 Gsuite caldav api 500 内部错误
- javascript - 如何更改使用导航按钮显示的 div?
- powerapps - SharePoint 和 PowerApps 表单...通过从第二个列表中检索数据来自动填充列表字段
- python - 如何使用 pandas 为在单元格中包含字典的数据框创建交叉表
- php - 警告:session_start() 期望参数 1 是数组,给定字符串
- plsql - ORA-19280: XQuery 动态类型不匹配: 预期原子值 - 得到节点