cfqueryparamがパラメーターにラップされるようにcfqueryコマンドを前処理することは可能ですか?
例:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>
Q:onRequestはこのクエリを前処理して、arguments.PersonIDが整数であることを確認できますか?
cfqueryparamがパラメーターにラップされるようにcfqueryコマンドを前処理することは可能ですか?
例:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>
Q:onRequestはこのクエリを前処理して、arguments.PersonIDが整数であることを確認できますか?
いいえ。まず、onRequest()は実行時に実行されますが、その時点ですべてのコードがコンパイルされているため、実行されているのはCFMLではありません。だからあなたは手遅れです。
第二に...なぜあなたはコード書き込み時間(より良い用語がないため)操作を実行時操作にリンクしたいのですか?コードは一度書き込まれると、トラフィックの少ないWebサイトでも、それよりも桁違いに頻繁に実行されます。#ordersOfMagnitude-1#
したがって、前処理操作は、必要以上にコード時間で実行しようとします。
一歩下がってみましょう...そもそもこの道を進んだ根本的な問題は何ですか?実行時にコードを前処理するというこの概念ではなく、おそらくその問題を検討する必要があります(おそらく別の質問を提起するか、これを完全に修正します)。
cfqueryparam
私はAdamに同意し、引数を使用すると、実行時に型を検証できることを追加したいと思います。次のようにクエリを変更する必要があります。
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.PersonID#" />
</cfquery>
arguments.PersonIDが有効な整数でない場合、クエリは実行されず、エラーがスローされます。