首页 > 解决方案 > 如何在 QueryExecute sql 语句中正确转义冒号?

问题描述

更新:对这个答案不满意,但我发现不传递参数结构会导致 CF2016 忽略冒号。看起来CF2018无论哪种方式都没有问题(尽管我目前只能通过查询查询来测试)。

我们生成了不使用查询参数的 sql 查询QueryExecute()。我有时会看到错误Space is not allowed after parameter prefix ':'并发现它是由带有冒号和空格的字符串文字引起的。例如:

select 'test this: error'

我无法找到逃避冒号的官方方法,常见的逃避方法也不起作用,但想出了这个解决方法......

sqlstring = replace(sqlstring, ": ", ":'+' ", "all")

然而,这并没有考虑到可能出现的其他情况,这些情况不会是字符串文字,例如带有冒号和空格的列名,并且可能还有更多我目前无法想到的情况。

有没有官方的方法来逃避传递给QueryExecute不属于a 的冒号queryparam

标签: coldfusioncfmlcoldfusion-2016

解决方案


我想您可以将字符串分开并传入

result = QueryExecute("
  SELECT :mystring AS ...
  ",
  { mystring : "test this: error"}
  );

不过似乎工作量很大。


推荐阅读