CFQUERYPARAM прерывается с помощью + в URL-адресе

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

  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">;

Идентификатор является целым числом в MySQL, но приведенный выше запрос возвращает идентификатор, который не пришел из таблицы и даже не является целым числом, кажется, это случайное БОЛЬШОЕ! Если я удалю 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


person Pete    schedule 27.10.2009    source источник


Ответы (1)


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

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


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

person Peter Boughton    schedule 27.10.2009
comment
Объясняет ли это, почему запросы возвращают разные результаты с параметром cfqueryparam и без него? - person Sixten Otto; 27.10.2009
comment
Питер, почему ты удалил теги cfqueryparam из его вопроса? - person Sixten Otto; 28.10.2009
comment
Выполнение запроса SELECT id FROM table WHERE 1=0 просто возвращает 0 строк. Как я уже говорил, единственная проблема возникает при использовании тегов CFQUERYPARAM. Каково было ваше редактирование, Питер? Казалось, что все, что нужно было сделать, это скрыть теги CFQUERYPARAM в вопросе. - person Pete; 28.10.2009
comment
Извините, я не знаю, что случилось с этими тегами cfqueryparam... это было сделано непреднамеренно! Должно быть, ошибка SO или браузера. Правка, о которой я говорил, относилась к моему ответу - последний абзац. StackOverflow имеет особенность дизайна, при которой изменения в течение определенного периода не оставляют контрольного следа, поэтому нет никаких указаний на то, что я добавил последний абзац позже. - person Peter Boughton; 28.10.2009
comment
Что касается самой проблемы... она действительно кажется странной. Comcar, можете ли вы обновить вопрос с определением таблицы MySQL (например, SHOW CREATE TABLE <tablename>) и подтвердить, какие настройки источника данных CF Admin вы используете? - person Peter Boughton; 28.10.2009
comment
Черт возьми, я забыл упомянуть об этом в первую очередь ... вот почему я спрашивал о + в URL-адресе, если я удалю его, это сработает. - person Pete; 29.10.2009