11 sql string coldfusion railo cfml
我在ColdFusion中编码,但是试图留在cfscript中,所以我有一个函数允许我传入一个查询来运行它
<cfquery blah >
#query#
</cfquery>
但不知何故,当我构建查询sql = "SELECT * FROM a WHERE b='#c#'" 并将其传入时,ColdFusion已将单引号替换为2个单引号.所以它变成 WHERE b=''c''了最后的查询.
我尝试过很多不同的方法创建字符串,但我不能只留下一个引用.即使进行字符串替换也没有效果.
知道为什么会这样吗?在这个项目期间,它破坏了我在cfscript中生活的希望
ale*_*ale 18
根据设计,ColdFusion在<cfquery>标记内插变量时会转义单引号.
要做你想做的事,你需要使用这个PreserveSingleQuotes()功能.
<cfquery ...>#PreserveSingleQuotes(query)#</cfquery>
Run Code Online (Sandbox Code Playgroud)
但是,这并没有解决您自己暴露的SQL注入的危险.
使用<cfqueryparam>还允许您的数据库缓存查询,这在大多数情况下将提高性能.
阅读旧的Ben Forta专栏以及Brad Wood最近发布的有关使用益处的更多信息可能会有所帮助<cfqueryparam>.
正如其他人所说,你的问题的答案正在使用 preserveSingleQuotes(...)
但是,您实际需要的解决方案不是以这种方式动态构建查询.这是坏坏.
将SQL放在cfquery标记内,并根据需要使用任何ifs/switch/etc,并确保所有 CF变量都使用该cfqueryparam标记.
(注意,如果在ORDER BY子句中使用变量,则需要手动转义任何变量;不能在ORDER BY子句中使用cfqueryparam)