SQLクエリでプレースホルダーon
を''で囲むことで置き換えるときはいつでも、これを防ぐ方法はありますか?
それは私が次のようなことをすることができないことを意味します
SQL("SELECT * FROM {table} blah").on("table" -> tabletouse)
これは、テーブル名が''でラップされているため、SQL構文エラーが発生するためです。
SQLクエリでプレースホルダーon
を''で囲むことで置き換えるときはいつでも、これを防ぐ方法はありますか?
それは私が次のようなことをすることができないことを意味します
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 *)