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
и посмотреть, если вы получите случайные идентификаторы?