You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sequelize中不使用查询构造器正确使用绑定参数?

问题原因

你当前使用的findAll是Sequelize的模型查询构造器API,该API本身不支持bind配置项和$参数名的绑定语法,bind参数是专门提供给原生查询sequelize.query()使用的。
你在where条件中写的'$open'会被Sequelize直接识别为普通字符串处理,生成SQL时不会替换为bind配置中的open对应值,最终生成的SQL相当于直接查询status等于'$open'或者转义后的无效参数值,自然无法匹配到数据。

解决方法

提供两种可行方案,你可以根据使用场景选择:

  • 方案1:继续使用查询构造器,无需手动绑定参数
    Sequelize的查询构造器内部已经自动实现了参数化查询,不存在SQL注入风险,直接传入变量即可:
    const targetStatus = 'open'
    await User.findAll({
      where: {
        status: targetStatus
      }
    })
    
  • 方案2:需要使用绑定参数语法时,改用原生查询
    如果你确实需要使用绑定参数的写法,要调用原生查询API,同时引入QueryTypes指定查询类型:
    const { QueryTypes } = require('sequelize')
    const result = await sequelize.query(
      'SELECT * FROM users WHERE status = $open',
      {
        bind: { open: 'open' },
        model: User, // 可选配置,添加后返回结果会自动封装为User模型实例,和findAll返回格式一致
        type: QueryTypes.SELECT
      }
    )
    

内容的提问来源于stack exchange,提问作者Alvaigan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:45:04