首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala Play框架模拟SQL.on禁用包装替换为‘’

Scala Play框架模拟SQL.on禁用包装替换为‘’
EN

Stack Overflow用户
提问于 2012-07-30 18:39:15
回答 2查看 1.2K关注 0票数 3

每当我使用on替换SQL查询中的占位符时,它都会用'‘括起来,有没有办法避免这种情况?

这意味着我不能像这样做

代码语言:javascript
复制
SQL("SELECT * FROM {table} blah").on("table" -> tabletouse) 

因为它使用'‘对表名进行包装,这会导致SQL语法错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-30 22:53:08

当然,您可以将这两种方法结合起来,对不希望转义的数据使用format函数

代码语言:javascript
复制
SQL(
  """
    select %s from %s
    where
      name = {name} and
      date between {start} and {end}
    order by %s
  """.format(fields, table, order)
).on(
  'name     -> name,
  'start    -> startDate,
  'end      -> endDate
)

只需考虑使用format函数发送的数据不应来自用户输入,否则应对其进行适当的清理

票数 4
EN

Stack Overflow用户

发布于 2012-07-30 20:54:32

你不能做你正在尝试的事情。Anorm的替代品是基于PreparedStatements的。这意味着所有数据都将自动转义,这意味着您不能使用替换:

  • 表名、
  • 列名、
  • 任意操作数、SQL关键字等。

在这里你能做的最好的事情就是字符串连接(在我看来这是一种非常糟糕的方式):

代码语言:javascript
复制
SQL("SELECT * FROM " + tabletouse + " blah").as(whatever *)

PS :签出此question about table names in PreparedStatements.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11719802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档