10

编写 cfqueryparam 或 cfprocparam 时,cfsqltype 是可选的。但是,我通常看到它编码。指定 cfsqltype 有什么好处吗?

4

2 回答 2

16

主要好处是在将查询输入传递到查询之前,对查询输入进行额外的完整性检查。此外,对于日期时间值,如果指定了 cfsqltype="CF_SQL_DATE" 或 ="CF_SQL_TIMESTAMP",我相信 CF 会正确地将日期时间字符串转换为正确的数据库格式。

此外,我认为这让未来的开发人员在阅读您的代码时可以更清楚地看到被排除的类型。

于 2012-03-19T22:15:30.260 回答
13

我会补充杰克的评论。在大多数 RDBMS 中,数据库需要通过类型查找来运行您的变量,以确保它是正确的类型,或者可以隐式转换为正确的类型。数据库不只是在表或视图中抛出“任何类型”的变量。它必须在执行计划中建立正确的类型。因此,如果您不提供类型,则要求数据库“弄清楚”。

然而,当您指定类型时,您会抢占或预先限定数据类型。引擎知道驱动程序正在呈现某种类型的变量,然后可以直接使用它或直接派生它。

请记住,虽然安全性是使用 cfqueryparam 的一个很好的理由,但这只是一个原因。另一个原因是创建可以有效执行的正确准备的语句 - 理想情况下“弹出”数据库服务器上的执行计划缓存。

于 2012-03-19T22:37:27.787 回答