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

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 ответ

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

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


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

Другие вопросы по тегам