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