2017-02-21 34 views
0

Первый раз постер. Обычно я могу это понять самостоятельно. Но, увы, я ударил по кирпичной стене.QoQ: LIKE сравнение не возвращает всех ожидаемых записей

Основы здесь Я пытаюсь взломать каталог продуктов в пользовательскую систему CRM, которую у меня есть. Я использую систему DAO для извлечения данных из базы данных с функциями для чтения и фильтрации. Фильтр представляет собой запрос запросов.

Проблема в том, что я создаю функцию поиска для поиска страницы.

<cfset this.itemSet = this.damoney_itemsDAO.filter(this.searchData 
     , "item_name LIKE '%#resultList#%'") /> 

Когда я сбросить запрос здесь я получаю:

SELECT (fields) 
FROM arguments.query(which is just a mass read) 
WHERE item_name LIKE '%electrodes%' 

В БД есть элементы, такие как «Бла Бла электродах», которые не получают вытягивались. Когда я запускаю его в базе данных, я получаю результат, который я ищу. Но программно он отображает только 2 элемента.

<cfoutput query="this.itemSet" startRow="#start#" maxRows="#perpage#"> 

Здесь я буду выводить информацию и нет, если есть или что-то еще. Это всего лишь HTML, чтобы перечислять элементы.

С удовольствием предоставит дополнительную информацию, если необходимо. Но если кто-то здесь работал с системой DAO и раньше сталкивался с этой проблемой, возможно, вы можете дать некоторое представление.

У меня также есть опция запроса, встроенная в DAO, но я стараюсь избежать этого при всех затратах из-за серьезной проблемы безопасности, связанной с этим. (инъекция)

+0

Это поможет увидеть образец «ожидаемых» записей и записи «на самом деле». RE: * такие предметы, как «Blah Blah Electrodes» * Глупый вопрос, но отражает ли QoQ тот факт, что QoQ чувствительны к регистру? Потому что ''% электродов% ''не будет соответствовать ** ** ** лекциям". – Leigh

+0

это не так. Но это приводит меня к правильному пути – inozzel

+0

* стараюсь избежать этого ... из-за серьезной проблемы безопасности, связанной с этим * Именно о том, о каких рисках вы говорите? Любые запросы в приложении должны использовать 'cfqueryparam' именно по этой причине. – Leigh

ответ

0
... WHERE lowercase(item_name) LIKE '%electrodes%' 

LIKE чувствительны к регистру, так что «ли Электроды» и «л электроды» являются полностью различной.

+0

Всем, спасибо, я не думал об этом вообще. Это ставит меня на правильный путь. Я не могу передать lowercase() в мой DAO, но я могу добавить к этому исключение. это старый поговорка, KISS. я. я должен помнить об этом в следующий раз. – inozzel

+0

И это все. ниже (# вар #). Спасибо!!! – inozzel

+0

* ".... LIKE чувствителен к регистру." * Не совсем. Как упоминалось в комментариях, ВСЕ сравнение строк в QoQ чувствительны к регистру, то есть равно, IN, <> и т. Д. Кроме того, нижний регистр не поддерживается, но 'lower()' is. См. [Документация QoQ:] (https://helpx.adobe.com/coldfusion/developing-applications/accessing-and-using-data/using-query-of-queries/query-of-queries-user-guide. html) – Leigh