2011-06-22 12 views
1

私は多くの関連する質問を見ましたが、それらのどれも私の問題ではありません。Hibernate Query Escaping(Grails 'GORMから) - again

一般的な質問:特にGrails GORMの場合、Hibernateでどのようにエスケープされるのかが正確に指定されていますか?

特に問題:

私はこれを実行する:

"WHERE extractValue(field, '//value[@my_attribute=\""+localeStr+"\"]')" 

あなたが気づくことができ、localeStrは脱出し、文字列の別の文字列に含まれていません。 可能であればパラメータを使ってエスケープするにはどうすればいいですか?

ありがとうございました。

答えて

0

Here, I believe, in "bind parameters" section。さらに一般的なGroovyのエスケープ。

申し訳ありませんが、明確ではない - エスケープするのは何ですか?パラメータを含むには、localeStrが必要ですか、または反対に、可能な任意のパラメータを消去しますか?

":""?"を削除することは、私にとっては必要です。とにかく、信頼できないStringをクエリに直接連結するのは悪い考えです。

Stringパラメータをサニタイズする最良の方法は、えー、それをパラメータとして渡すことです:

DomainClass.findAll(
    "WHERE extractValue(field, '//value[@my_attribute=:attrValue]', 
    [attrValue: localeStr])") 

findAll() docを参照してください。

+0

あなたは正しいので、localeStrをパラメータとして渡す必要があります。しかし、そうではありません。どういうわけか。 「attrValueは「my string」のようなものに置き換えられ、そのコンテキストでは次のようになります。 「extractValue(field、 '// value [@ my_attribute =' my string ']'」「 見ることができます、 ''は、正しいエスケープ文字ではありません。 – icvg