首页 > 解决方案 > 我们可以在 sql 中将对象作为参数传递给数组,以防止使用 promise-mysql 模块在 nodejs 中注入 sql

问题描述

我想将对象传递给 SQL 查询。

我知道这有效:

connection.query('SELECT * FROM projects WHERE status = ?',
    ['active']
)

使用命名对象属性作为参数的正确语法是什么?像这样的东西:

connection.query('SELECT * FROM projects WHERE status = :status ',
    { status: 'active' }
)

标签: javascriptmysqlsqlnode.js

解决方案


这种可能性不是开箱即用的,但是 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" });

推荐阅读