cffunction内で、cfqueryを使って、sql文を発行するのはよくあることなのですが、注意しないと、ファンクションの呼び出し元で参照できてしまうときがあります。
例をみてみましょう。
<cffunction name="lf_test"> <cfquery name="hoge" datasource="foo"> select ・・・ from ・・・ </cfquery> </cffunction> <cfoutput> #lf_test()#
<cfloop query="hoge"> ・・・ </cfloop> </cfoutput> |
構造は簡単。
hoge関数をコールすると、select文を発行してくれるというもの。
で、重要なところは、その次のcfloopの部分。
これ、クエリーの結果が表示されるでしょうか?
実は、これ表示されるんですねー。
内部でcfqueryを呼び出していても外部で参照することができるのです。
つまり情報として隠蔽しきれていないわけです。
ではこれを隠蔽するには??
実に簡単。
関数内部でcfscriptで変数宣言を行えばできます。
<cffunction name="lf_test"> <cfscript> var hoge = QueryNew(""); </cfscript> <cfquery name="hoge" datasource="foo"> select ・・・ from ・・・ </cfquery> </cffunction> <cfoutput> #lf_test()#
<cfloop query="hoge"> ・・・ </cfloop>
</cfoutput> |
こうすることによって、呼び出し元でqueryを呼び出すことができません。
(したがって、上のソースは、cfloopでエラーを引き起こします。)
cffunction内部で、queryを実行する時に注意したいっすね。
0 件のコメント:
コメントを投稿