Slick中的inSet和inSetBind有啥区别

Posted

技术标签:

【中文标题】Slick中的inSet和inSetBind有啥区别【英文标题】:What is the difference between inSet and inSetBind in SlickSlick中的inSet和inSetBind有什么区别 【发布时间】:2014-12-22 03:32:29 【问题描述】:

ScalaDoc of the functions尚未填写。

我知道这些方法用于模仿 SQL 的 IN 关键字(例如,SELECT * FROM table WHERE id IN VALUES(1, 42, 101) 可以用 table.filter(_.id inSet Seq(1, 42, 101)) 完成)。我不知道这个“绑定”版本是什么或如何选择我应该使用的。

【问题讨论】:

@BobDalgleish Slick 源代码对人类生命非常不利。 case in point 【参考方案1】:

inSetinSetBind 的不安全版本,它根据传入的输入生成安全/转义的 sql 值。在您手动设置值的示例中,两种类型的绑定同样安全。

通常使用绑定参数可以获得性能提升(通过生成的准备好的语句),但对于集合值则不然。详情请见here。

【讨论】:

我不明白其中的区别。你能解释一下吗?我尝试使用 slick 中的查询。发现如果我使用 inSet(List(1,2,3)) 查询将构建为 where id in (1,2,3)。如果我使用 inSetBind(List(1,2,3)),则查询变为 id in (?,?,?)。 @YaduKrishnan 后者是上面提到的占位符语法,每个 ?替换为安全/转义值。 你所说的“安全/转义”值是什么意思?可以举个例子吗? @YaduKrishnan 查找 sql 注入攻击、jdbc 准备好的语句等。底线只是使用 Slick 的绑定方法来确保您拥有安全、高性能的查询——简单;-)

以上是关于Slick中的inSet和inSetBind有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将`inSet`与列的元组一起使用?

steam账号分国家地区吗 怎么看自己的账号是啥区

::before 伪类影响 react-slick 中的箭头

GPIOx_BSRR 这个寄存器的功能既有设置又有清除,为啥还要GPIOx_BRR这个呢?啥区

Play 2.4 中的 Slick 3.0 事务

浅谈Slick- Slick101:第一个动手尝试的项目