LIKE не работает в SQL-запросе из php

niko111

Новичок
LIKE не работает в SQL-запросе из php

Здравствуйте уважаемые форумчане!
пишу скрипт который выбирает данные, так вот локально на компьютере все отрабатывает прекрасно.
После того как залил на хостинг все, всегда выдается сообщения что записей нету в выборке.
PHP:
function is_not_drug($name_drug)
{
  $db_query = mysql_query("SELECT count(*) FROM drug WHERE t_name LIKE '%$name_drug%'");
  if ($db_query)
  {
    $c_drug = mysql_result($db_query,0);
    if ($c_drug==0) return true;
    else return false;
  }
}

function get_id_drug($name_drug)
{
  $db_query = mysql_query("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");
  if ($db_query)
  {
    return mysql_result($db_query,0,'t_un');
  }
}
Исправил на
PHP:
function is_not_drug($name_drug)
{
  $db_query = mysql_query("SELECT count(*) FROM drug WHERE t_name = '$name_drug'");
  if ($db_query)
  {
    $c_drug = mysql_result($db_query,0);
    if ($c_drug==0) return true;
    else return false;
  }
}

function get_id_drug($name_drug)
{
  //echo ($name_drug);
  $db_query = mysql_query("SELECT t_un FROM drug WHERE t_name = '$name_drug'");
  echo (mysql_num_rows($db_query));
  if ($db_query)
  { 
    return mysql_result($db_query,0,'t_un');
  }
}

Все работает и локально и на хостинге.
Подскажите пожалуйста почему с LIKE не работает? пробовал экранировать как описано в статье http://phpfaq.ru/slashes#like
т.е. добавил такие строчки
PHP:
$name_drug=str_replace('\\','\\\\',$name_drug);
$name_drug=mysql_real_escape_string($name_drug);
$name_drug=addCslashes($name_drug, '_%');
Все равно не работает.
PHP:
  $db_query = mysql_query("SELECT count(*) FROM drug WHERE t_name LIKE '%$name_drug%'");  //не работает (всегда возвращает 0)
  $db_query = mysql_query("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");       //не работает (возвращает пусто)
  $db_query = mysql_query("SELECT count(*) FROM drug WHERE t_name = '$name_drug'");       // работает
  $db_query = mysql_query("SELECT t_un FROM drug WHERE t_name = '$name_drug'");  //работает
Подскажите пожалуйста в чем может быть проблема, как заставить LIKE работать на хостинге? в phpmyadmin LIKE прекрасно отрабатывает.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Будь добр при проблемах с запросами показывать сами заросы, а не смесь sql c php

-~{}~ 18.01.09 17:40:

//не работает (всегда возвращает 0)
//не работает (возвращает пусто)
[m]var_dump[/m]
[m]mysql_query[/m]

-~{}~ 18.01.09 17:42:

А вообще тебе сюда
www.phpfaq.ru/debug
 

niko111

Новичок
Автор оригинала: Mr_Max
Будь добр при проблемах с запросами показывать сами заросы, а не смесь sql c php
Я извиняюсь, я же привел конкретные функции которые сделал, не совсем понятно, что значит показать сами запросы? :(
Уже часов 5 пытаюсь разобраться почему локально LIKE работает, а на хостинге не работает :(((
Заранее спасибо
 

Фанат

oncle terrible
Команда форума
это значит, что, что с базой работают SQL запросы, а не функции PHP.
и первое, что надо сделать, выясняя причину проблему - это посмотреть на сами запросы.

-~{}~ 18.01.09 19:00:

Уже часов 5 пытаюсь разобраться
очень хорошо.
как именно ты разбирался?
 

niko111

Новичок
Автор оригинала: *****
это значит, что, что с базой работают SQL запросы, а не функции PHP.
и первое, что надо сделать, выясняя причину проблему - это посмотреть на сами запросы.

-~{}~ 18.01.09 19:00:


очень хорошо.
как именно ты разбирался?
Изучал экранирование http://phpfaq.ru/slashes#like
копал поиск по форуму на подобные проблемы, искал в яндексе.

mysql_query("SELECT count(*) FROM drug WHERE t_name LIKE '%$name_drug%'");

в $name_drug передаются названия лекарств из dbf таблицы, например:
Лекарство Масло гвоздики 10мл
Лекарство Золототысячник трава 50г


var_dump от $name_drug возвращает string(100) "Лекарство Золототысячник трава 50г "
var_dump от mysql_query возвращает resource(171) of type (mysql result)

Пожалуйста помогите разобраться почему LIKE не работает на хостинге :(
 

Фанат

oncle terrible
Команда форума
копал поиск по форуму на подобные проблемы, искал в яндексе.
то есть, если у тебя сломается машина, ты будешь искать в яндексе по запросу "сломалась машина"?

ребят, без инженерного подхода в программировании делать не-че-го!
надо уметь действительно разбираться. исправлять не те проблемы, которые подсказывает фантазия, а те, которые РЕАЛЬНО ЕСТЬ. Для этого надо их уметь находить. Отлаживая свою программу.

Где в твоих маслах гвоздики хоть одно подчеркивание или слеш? Если их нету, то при чем здесь "изучал экранирование"? почему ты занимался решение проблему, которой нет?

ты отправляешь в базу ЗАПРОС. Ну ладно - сам не дотумкал его вывести - тебе уже здесь ТРИ раза сказали - выведи запрос целиком. Где он?
где вывод этого же самого поля через вар-дамп и сравнение побуквенное обеих строк?
 

niko111

Новичок
пробовал менять запрос с
PHP:
"SELECT count(*) FROM drug WHERE t_name LIKE '%$name_drug%'"
/[PHP]
на 
[PHP]
"SELECT count(*) FROM drug WHERE t_name LIKE '%".$name_drug."%'"
Как в примерах на сайтах, все-равно ничего не меняется.

-~{}~ 18.01.09 19:29:

Автор оригинала: *****

ты отправляешь в базу ЗАПРОС. Ну ладно - сам не дотумкал его вывести - тебе уже здесь ТРИ раза сказали - выведи запрос целиком. Где он?
где вывод этого же самого поля через вар-дамп и сравнение побуквенное обеих строк?
как его вывести-то?
Где перехватить?
 

Фанат

oncle terrible
Команда форума
ДА КАКАЯ РАЗНИЦА, КАК ТЫ ТАМ ПИШЕШЬ В ПХП???

Ты что - вообще не понимаешь, что итогом и того и того кода будет ОДНА И ТА ЖЕ строчка?

И ты так и не понял, после всего, что я говорил, что важно не как ты что там пишешь в пхп, а какая строчка получается в итоге и ИДЕТ В БАЗУ?!

-~{}~ 18.01.09 19:32:

Где перехватить?
господи. это ж надо.
запрос - это строчка. которую ты сам, своими руками пишешь в своем скрипте.
хочешь сказать, что не можешь вывести строчку в браузер?
 

niko111

Новичок
PHP:
//вывел через echo, то что передаю в mysql_query

SELECT count(*) FROM drug WHERE t_name LIKE '%Масло гвоздики 10мл %'   //не работает

SELECT count(*) FROM drug WHERE t_name = 'Масло гвоздики 10мл ' // работает
вот запросы, видно что проблема в LIKE, вот я и не могу понять что не так
в phpmyadmin данные запросы отрабатывает одинаково! :(
 

Фанат

oncle terrible
Команда форума
короче.
вместо
mysql_query("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");
надо всего лишь написать
echo("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");
чтобы визуально проконтролировать, идет ли в базу именно то, что ты ожидаешь.
это первое что надо сделать, когда запросы не находит то, что должен.

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

-~{}~ 18.01.09 19:37:

в phpmyadmin данные запросы отрабатывает одинаково!
как ты проверял?
как ты мог проверять ЭТИ запросы, если ты видишь их впервые в жизни?
 

niko111

Новичок
Автор оригинала: *****
короче.
вместо
mysql_query("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");
надо всего лишь написать
echo("SELECT t_un FROM drug WHERE t_name LIKE '%$name_drug%'");
чтобы визуально проконтролировать, идет ли в базу именно то, что ты ожидаешь.
это первое что надо сделать, когда запросы не находит то, что должен.

потому что с базой работает именно запрос. а не функция пхп.
а ты - как программист, должен понимать, какой запрос ты в базу отправляешь.
Понял, я это уже сделал в предыдущем посте :)

Автор оригинала: *****
как ты проверял?
как ты мог проверять ЭТИ запросы, если ты видишь их впервые в жизни?
Я перед тем как писать на php пробовал делать разные SELECT'ы в phpmyadmin, т.е. вместо $name_drug подставлял реальные наименования
 

Фанат

oncle terrible
Команда форума
а не надо ничего подставлять.
надо отправлять именно то, что у тебя идет в базу. понимаешь?
ты понимаешь, что точто ты там колупаешь в админе, и то, что у тебя в скрипте - это РАЗНЫЕ запросы?
 

niko111

Новичок
Автор оригинала: *****
а не надо ничего подставлять.
надо отправлять именно то, что у тебя идет в базу. понимаешь?
ты понимаешь, что точто ты там колупаешь в админе, и то, что у тебя в скрипте - это РАЗНЫЕ запросы?
теперь понял, спасибо! буду копать дальше
 

Фанат

oncle terrible
Команда форума
надо было сразу это делать. разбираться.
выбери это лекарство из базы и сделай ему вар-дамп.
и рядом - $name_drug
 

x-yuri

Новичок
*****
а у тебя есть идеи, почему эти запросы
SELECT count(*) FROM drug WHERE t_name LIKE '%Масло гвоздики 10мл %'
SELECT count(*) FROM drug WHERE t_name = 'Масло гвоздики 10мл '
работают по разному?
 

Фанат

oncle terrible
Команда форума
у меня есть подозрение, но я в нем не уверен.
и я не люблю подозрения.

но попробуй убрать лишний пробел
 

niko111

Новичок
Автор оригинала: *****
надо было сразу это делать. разбираться.
выбери это лекарство из базы и сделай ему вар-дамп.
и рядом - $name_drug
Большое спасибо!
Все оказалось проще паренной репы :)
сделал обрубание пробелов по краям через trim и все заработало :)
LIKE с пробелами не дружит...

PHP:
SELECT count(*) FROM drug WHERE t_name LIKE '%Масло гвоздики 10мл %'  // --- результат 0 (не верно)
SELECT count(*) FROM drug WHERE t_name LIKE '%Масло гвоздики 10мл%'  // --- результат 14 (верно)
SELECT count(*) FROM drug WHERE t_name = 'Масло гвоздики 10мл ' // --- результат 14 (верно)
SELECT count(*) FROM drug WHERE t_name = 'Масло гвоздики 10мл                                       ' // --- результат 14 (тоже верно)
Всем еще раз спасибо за помощь!
 

x-yuri

Новичок
***** в случае = происходит поиск по индексу c маленькой длиной префикса?
 

Фанат

oncle terrible
Команда форума
не знаю. может, у него там чар, который автоматом тримится
 

fflesh4

Новичок
Добрый.
Столкнулся с похожей проблемой на DLE - не корректно проверяет совпадения по мылу.
Вот такой запрос выполняется корректно:
PHP:
SELECT COUNT(*) as count FROM dle_users WHERE email = '[email protected]'; // найдено 1 совпадение
а так:
PHP:
SELECT COUNT(*) as count FROM dle_users WHERE email LIKE '%[email protected]%'; // 0
Из за чего, собственно и возникла проблема.. Причем, с другими адресами все работает корректно..
Есть идеи, в чем может быть проблема и как это устранить?
 
Последнее редактирование:
Сверху