如何绑定变量以续写文字?

pro*_*ton 6 javascript node.js sequelize.js

我有这个子查询,用于检查与源模型相关的列是否存在。

const defaultingLoans = await Loan.findAll({
    where: {
      [Op.and]: database.sequelize.literal('EXISTS(SELECT * FROM "Instalments" WHERE "Instalments"."loanId" = "Loan"."id" AND "Instalments"."status" = 'pending')')
    }
  });
Run Code Online (Sandbox Code Playgroud)

查询工作正常,但pending理想情况下该值不会固定,所以我希望在那里有一个变量,可用于查询不同的状态。

如何用变量替换挂起的字符串。

串联在这里不起作用,因为 Sequelize 有一种奇怪的方式来解析导致错误的串联 SQL 查询。一个例子在这里https://pastebin.com/u8tr4Xbt我在这里截取了错误截图

ic3*_*3rg 8

你可以defaultingLoans变成一个接受金额的函数:

const defaultingLoans = amount => await Loan.findAll({
  where: {
    [Op.and]: database.sequelize.literal(`EXISTS(SELECT * FROM "Instalments" WHERE "Instalments"."loanId" = "Loan"."id" AND "Instalments"."amount" = ${amount})`)
  }
});
Run Code Online (Sandbox Code Playgroud)

用法:

const loans = defaultingLoans(2000);
Run Code Online (Sandbox Code Playgroud)

编辑:虽然这里应该注意,您需要清理或引用amount传递给此函数的信息,以避免 SQL 注入攻击。

  • 在这种情况下,如果 SQL 注入暴露给用户,请小心。金额可以是“2000”;从“分期付款”中删除;'` (2认同)