【问题标题】:Binding parameters with sequelize fails if multiple如果多个,使用 sequelize 绑定参数会失败
【发布时间】:2016-10-19 07:23:19
【问题描述】:

数据库是 Postgres(在 Sequelize 中支持 Postgres 的绑定参数)。

奇怪的东西。

以这种方式运行原始查询和绑定参数时:

return models.sequelize.query(q, {bind: ['33', 'test']}).then(function (data) {

然后sequelize好像绑定参数失败了。

查询本身类似于

select * from A where id = $1    

只要我删除传递给绑定的数组中的第二个元素,绑定就会起作用。 但是当有多个元素时,$1 不会转换为值。这是我在日志中可以看到的。 仅存在绑定参数时的查询将打印

select * from A where id = 33

同时在添加多个绑定参数时会打印查询

select * from A where id = $1

【问题讨论】:

    标签: postgresql sequelize.js


    【解决方案1】:

    我的错。我没有查看发送给客户端的真正错误消息。 它与参数的数量无关。 问题是使用 LIKE 我有类似的东西:

    and name LIKE '%$2%'
    

    这给出了错误: 绑定消息提供2个参数,但prepared statement需要1个

    这是真正的问题。

    【讨论】:

      【解决方案2】:

      我意识到这是一个旧线程。但是,对于那些面临此问题并使用 postgresql 的人来说,这可能是一种解决方法。

      let array = ['33', 'test'];
      let query = `SELECT * FROM A WHERE id::text IN(SELECT UNNEST(STRING_TO_ARRAY($1, ','))::text)`
      
      // Now we can run the query.
      models.sequelize.query(q, {bind: [array.toString()]})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        相关资源
        最近更新 更多