0

是否可以预处理 cfquery 命令,以便将 cfqueryparam 包裹在参数周围?

例子:

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

问:onRequest 可以预处理这个查询以确保 arguments.PersonID 是一个整数吗?

4

2 回答 2

3

不。首先, onRequest() 在运行时执行,但此时所有代码都已编译,因此无论如何都不是正在执行的 CFML。所以你来晚了。

其次...您为什么要将代码编写时间(因为没有更好的术语)操作链接到运行时操作?代码编写一次,然后——即使是在一个流量不大的网站上——执行的频率也比这要高出几个数量级。因此,您的预处理操作将尝试在代码#ordersOfMagnitude-1#时间上运行,而不是这样做。

让我们退后一步……让你走上这条道路的根本问题是什么?这可能是需要研究的问题,而不是在运行时预处理代码的概念(可能会提出一个不同的问题,或者完全修改这个问题)。

于 2012-09-17T23:05:50.420 回答
2

我同意 Adam 的观点,只是想补充一点,如果您cfqueryparam在参数周围使用它,它可以在运行时为您验证类型。您只需要像这样更改您的查询:

<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 回答