2015-12-03 2 views
0

У меня есть WYSIWYG ввод для описания. Для того, чтобы сохранить это в базе данных я использовалOracle Где, как htmlentities

$desc = htmlentities($_POST['desc'], ENT_QUOTES, "UTF-8"); 

Так что на стороне базы данных, описание сохраняется что-то вроде John's. Теперь я хочу получить все строки, где desc - LIKEJohn's.

Перед выполнением запроса, я готовлю описание:

$desc = strtolower(htmlentities($desc, ENT_QUOTES, "UTF-8")); 

Я использую это на мой ИНЕКЕ:

WHERE LOWER(desc) LIKE '%{$desc}%' 

запрос не возвращает ничего, хотя, который где мне нужна ваша помощь ,

EDIT:

на PL/SQL, когда я использую

WHERE LOWER(desc) LIKE '%john's%' 

небольшое окно появляется запрос о variables, который выглядит примерно так:

Name Value 
============= 
amp  (this part is blank) 

Может быть, это где проблема есть?

+0

Вы уверены, что это делает замену переменных и не ищет строковый литерал «{$ desc}»? –

+0

Я могу сделать это более длинным способом, используя '.' для добавления строк, но я сделал это несколько раз. Вот как я обычно вставляю переменные внутри строки просто из-за удобства и форматирования. –

+0

Плюс, если я ищу 'Джон', он выбирает правильные строки, как ожидалось. Проблема возникает только при наличии апострофа в строке поиска. –

ответ

0

В дополнение к нашей дискуссии в комментариях, и показать пример в Oracle:

with tab as (
      select ' xxx dave xxx' nam from dual 
union all select 'yyy Dave zzz' nam from dual 
union all select 'yyy John rrr' nam from dual 
union all select 'sss johns zzz' nam from dual 
union all select 'yyy jOHn''s zzz' nam from dual) 
select nam from tab 
where lower(nam) like '%john''s%'; 

NAM 
------------------    
yyy jOHn's zzz 

Таким образом, базовая конструкция нижнего (вроде) «% джон» в%»работает в Oracle. Кажется, что проблема в том, как создается ваш запрос. Вы отправляете строку запроса где-нибудь перед выполнением, чтобы ее можно было протестировать?

+0

Вот запрос 'SELECT * FROM table WHERE LOWER (desc) LIKE '% john''s% ''. Я добавил некоторую информацию, которую я только что узнал, поэтому, пожалуйста, взгляните на обновленный пост. –

+0

Вместо сохранения описания в базе данных как «John ' s' где' ' '- это объект HTML для' '', он был сохранен как 'John & # 39'. Обратите внимание, что '&' получил замену на '&', который для меня похож на двоичную кодировку HTML. –

+0

да, поэтому есть разница между тем, как строка разбирается при сохранении, и как она анализируется для вашего запроса. Я предполагаю, что при сохранении вы не используете одни и те же htmlentities ($ _ POST ['desc'], ENT_QUOTES, «UTF-8»); построить? –