是否可以预处理cfquery命令,以便cfqueryparam包含参数?
示例:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>
问:onRequest可以预处理此查询以确保arguments.PersonID是一个整数吗?
答案 0 :(得分:3)
没有。首先,onRequest()在运行时执行,但是哪些代码已经编译完成,所以不管怎么说它都是CFML。所以你来不及。
其次......为什么你想要将代码写入时间(缺少更好的术语)操作链接到运行时操作?代码被编写一次,然后 - 甚至在轻量级网站上 - 比这更频繁地执行数量级。因此,您的预处理操作将尝试在代码#ordersOfMagnitude-1#
上运行,而不是必须这样做。
让我们退后一步......首先,你走在这条道路上的根本问题是什么?这可能是需要关注的问题,而不是运行时预处理代码的概念(可能引发不同的问题,或者完全修改这个问题)。
答案 1 :(得分:2)
我同意Adam并且只是想补充一点,如果你在你的参数周围使用cfqueryparam
它可以在运行时为你验证类型。您只需更改您的查询:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.PersonID#" />
</cfquery>
如果arguments.PersonID不是有效整数,则不会执行查询,并且会抛出错误。