【发布时间】:2019-09-19 13:19:33
【问题描述】:
我的 SQL 语句中有多个 OR,因此我想将其中的一小部分保存在 cfsavecontent 中。这是那部分:
<cfsavecontent variable="checkDepartment">
<cfif #wrkDept# EQ #dept[2][1]#>
Department = 'Health' AND
<cfelse>
Department = '#wrkDept#' AND
</cfif>
</cfsavecontent>
但我在页面上看到的错误显示了健康一词周围的 2 组撇号。
SQL
SELECT COUNT(*) AS numItems
FROM IT_PROJECTS
WHERE
Department = ''Health'' AND
status = 'Cancelled'
谁能帮我只得到一个撇号?谢谢
【问题讨论】:
-
这是一个常见问题。简短的回答,CF 故意这样做是为了防止sql injection 的常见形式。尽管您可以使用 PreserveSingleQuotes 来避免它 - 不要 - 这是一个 sql 注入风险。对于现代版本,最好的选择是使用查询参数。详细了解queryExecute and query parameters。
-
@MichaelDeDonato 您总是不得不担心注射。有意和无意的内部威胁是您最大的安全威胁。一次意外的注射仍然会毁了你的一天。此外,
cfqueryparam还有其他好处。 -
@Michael - 暂时忽略动态语法 - 为什么同一字段需要单独的 cfif?如果变量包含“健康”等值...只需在 sql 中使用它,即
WHERE ColumnName = <cfqueryparam value="#theVariableName#" cfsqltype="..."> -
...为什么
#wrkDept# eq #dept[2][1]#有特殊例外?您能否详细说明“每个都作为有关部门的 cfif 的意思。,因为可能有更好的方法来编写 sql。
标签: sql coldfusion where-clause