CFQUERYPARAM разрывается с "+" в URL - PullRequest
       20

CFQUERYPARAM разрывается с "+" в URL

1 голос
/ 27 октября 2009

У меня есть запрос:

  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 - это INTEGER в MySQL, но вышеприведенный запрос возвращает 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 Ответ

1 голос
/ 27 октября 2009

Field=text+moretext в URL-адресе перейдет к Url.Field1 как text moretext, поскольку пробелы в URL-адресах могут быть закодированы как плюсы.

Если вы хотите, чтобы в окончательной переменной был действительный знак +, используйте %2B или примените UrlEncodedFormat к исходной ссылке.


Если все это работает, то я предполагаю, что странное поведение со случайным идентификатором может быть связано со значением базы данных по умолчанию, когда предложение where не соответствует - попробуйте SELECT id FROM table WHERE 1=0 и посмотрите, получите ли вы случайные идентификаторы?

...