CFQUERYPARAM在URL中以“+”打破

时间:2009-10-27 17:28:39

标签: mysql coldfusion cfqueryparam

我有一个问题:

  SELECT id FROM table WHERE field1=<cfqueryparam value="#URL.field1#" 
    cfsqltype="cf_sql_varchar">
  AND field2=<cfqueryparam value="#URL.field2#" 
    cfsqltype="cf_sql_varchar">
  AND field3=<cfqueryparam value="#URL.field3#" 
    cfsqltype="cf_sql_varchar">;

Id是MySQL中的INTEGER,但上面的查询返回一个不是来自表的Id,甚至不是INTEGER,它似乎是一个随机的BIGINT! 如果我删除CFQUERYPARAM它虽然有效......

SELECT id FROM table WHERE field1='#URL.field1#' 
        AND field2='#URL.field2#'
        AND field3='#URL.field3#';

Field1,Field2和Field3都是数据库中的VARCHARS,但在URL中它们包含“+”,例如 Field1=text+moretext

如果我从URL字符串中删除“+”,它可以正常工作!我知道“+”是一个空格的表示,如果我再次在URL中输入一个空格,它就可以正常工作。只有存在“+”时才会破坏。

我做错了什么?或者我该怎么做才能使CFQUERYPARAM与URL中的“+”一起使用

1 个答案:

答案 0 :(得分:1)

网址中的Field=text+moretext将作为text moretext传递到Url.Field1,因为网址中的空格可以编码为优势。

如果您希望在最终变量中使用实际的+符号,请使用%2B,或将UrlEncodedFormat应用于原始链接。


如果一切正常,那么我猜当随机ID无法匹配时,随机ID的奇怪行为可能与默认数据库值有关 - 尝试SELECT id FROM table WHERE 1=0并查看是否获得随机ID?