是否可以预处理 cfquery 命令,以便将 cfqueryparam 包裹在参数周围?
例子:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>
问:onRequest 可以预处理这个查询以确保 arguments.PersonID 是一个整数吗?
是否可以预处理 cfquery 命令,以便将 cfqueryparam 包裹在参数周围?
例子:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = #arguments.PersonID#
</cfquery>
问:onRequest 可以预处理这个查询以确保 arguments.PersonID 是一个整数吗?
不。首先, onRequest() 在运行时执行,但此时所有代码都已编译,因此无论如何都不是正在执行的 CFML。所以你来晚了。
其次...您为什么要将代码编写时间(因为没有更好的术语)操作链接到运行时操作?代码编写一次,然后——即使是在一个流量不大的网站上——执行的频率也比这要高出几个数量级。因此,您的预处理操作将尝试在代码#ordersOfMagnitude-1#
时间上运行,而不是这样做。
让我们退后一步……让你走上这条道路的根本问题是什么?这可能是需要研究的问题,而不是在运行时预处理代码的概念(可能会提出一个不同的问题,或者完全修改这个问题)。
我同意 Adam 的观点,只是想补充一点,如果您cfqueryparam
在参数周围使用它,它可以在运行时为您验证类型。您只需要像这样更改您的查询:
<cfquery name="local.qry">
SELECT FirstName
FROM Person
WHERE PersonID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.PersonID#" />
</cfquery>
如果 arguments.PersonID 不是有效的整数,则不会执行查询并会引发错误。