2007/05/14

[coldfusion]cffunction内で、cfqueryを使う時の注意点

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 コメント:

コメントを投稿