当前位置:  开发笔记 > 数据库 > 正文

ColdFusion在字符串中构造数据库查询时添加额外的引号

如何解决《ColdFusion在字符串中构造数据库查询时添加额外的引号》经验,为你挑选了2个好方法。

我在ColdFusion中编码,但是试图留在cfscript中,所以我有一个函数允许我传入一个查询来运行它 #query#

但不知何故,当我构建查询sql = "SELECT * FROM a WHERE b='#c#'" 并将其传入时,ColdFusion已将单引号替换为2个单引号.所以它变成 WHERE b=''c''了最后的查询.

我尝试过很多不同的方法创建字符串,但我不能只留下一个引用.即使进行字符串替换也没有效果.

知道为什么会这样吗?在这个项目期间,它破坏了我在cfscript中生活的希望



1> ale..:

根据设计,ColdFusion在标记内插变量时会转义单引号.

要做你想做的事,你需要使用这个PreserveSingleQuotes()功能.

#PreserveSingleQuotes(query)#

但是,这并没有解决您自己暴露的SQL注入的危险.

使用还允许您的数据库缓存查询,这在大多数情况下将提高性能.

阅读旧的Ben Forta专栏以及Brad Wood最近发布的有关使用益处的更多信息可能会有所帮助.



2> Peter Bought..:

正如其他人所说,你的问题的答案正在使用 preserveSingleQuotes(...)

但是,您实际需要的解决方案不是以这种方式动态构建查询.这是坏坏.

将SQL放在cfquery标记内,并根据需要使用任何ifs/switch/etc,并确保所有 CF变量都使用该cfqueryparam标记.

(注意,如果在ORDER BY子句中使用变量,则需要手动转义任何变量;不能在ORDER BY子句中使用cfqueryparam)

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有