每当我使用on
它替换 SQL 查询中的占位符时,用 '' 包围替换,有没有办法防止这种情况发生?
这意味着我不能做类似的事情
SQL("SELECT * FROM {table} blah").on("table" -> tabletouse)
因为它用 '' 包装表名,这会导致 SQL 语法错误。
每当我使用on
它替换 SQL 查询中的占位符时,用 '' 包围替换,有没有办法防止这种情况发生?
这意味着我不能做类似的事情
SQL("SELECT * FROM {table} blah").on("table" -> tabletouse)
因为它用 '' 包装表名,这会导致 SQL 语法错误。
你当然可以结合这两种方法,对你不想被转义的数据使用格式函数
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 函数发送的数据不应来自用户输入,否则应正确清理
你不能做你正在尝试的事情。Anorm 的替换基于 PreparedStatements。这意味着所有数据将自动转义,这意味着您不能使用替换:
您可以在这里做的最好的事情是字符串连接(在我看来,这确实是一种糟糕的方式):
SQL("SELECT * FROM " + tabletouse + " blah").as(whatever *)