0

cfqueryparamがパラメーターにラップされるようにcfqueryコマンドを前処理することは可能ですか?

例:

<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>

Q:onRequestはこのクエリを前処理して、arguments.PersonIDが整数であることを確認できますか?

4

2 に答える 2

3

いいえ。まず、onRequest()は実行時に実行されますが、その時点ですべてのコードがコンパイルされているため、実行されているのはCFMLではありません。だからあなたは手遅れです。

第二に...なぜあなたはコード書き込み時間(より良い用語がないため)操作を実行時操作にリンクしたいのですか?コードは一度書き込まれると、トラフィックの少ないWebサイトでも、それよりも桁違いに頻繁に実行されます。#ordersOfMagnitude-1#したがって、前処理操作は、必要以上にコード時間で実行しようとします。

一歩下がってみましょう...そもそもこの道を進んだ根本的な問題は何ですか?実行時にコードを前処理するというこの概念ではなく、おそらくその問題を検討する必要があります(おそらく別の質問を提起するか、これを完全に修正します)。

于 2012-09-17T23:05:50.420 に答える
2

cfqueryparam私はAdamに同意し、引数を使用すると、実行時に型を検証できることを追加したいと思います。次のようにクエリを変更する必要があります。

<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.PersonID#" />
</cfquery>

arguments.PersonIDが有効な整数でない場合、クエリは実行されず、エラーがスローされます。

于 2012-09-18T12:13:25.873 に答える