1

我有一个查询:

  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 中的“+”一起工作

4

1 回答 1

1

url 中的Field=text+moretext将通过 Url.Field1 as text moretext,因为 URL 中的空格可以编码为加号。

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


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

于 2009-10-27T18:05:06.837 回答