поиск в базе данных MySQL - PullRequest
1 голос
/ 20 апреля 2010

В настоящее время у меня есть база данных музыки, которая у меня есть в db'd в mysql, сейчас я пишу для нее php-интерфейс, и она будет перечислять все в таблице, это работает, но если я буду искать «the beatles» это дает мне 453 результата (правильно), однако, если я просто ищу «битлз», это приводит к 0 строкам, как бы я смог сделать так, чтобы он мог искать что-то подобное?

вот моя текущая строка:

$query2 = "SELECT * From `songs` WHERE `Artist` like '".$_REQUEST['q']."'
   OR `Album` like '".$_REQUEST['q']."' OR `Genre` like '".$_REQUEST['q']."'
       OR `Title` like '".$_REQUEST['q']."';";

РЕДАКТИРОВАТЬ Переформатированный запрос @ Yacoby

 $query2 = "SELECT * "
         . "From `songs` "
         . "WHERE `Artist` like '".$_REQUEST['q']."' "
         .   "OR `Album` like '".$_REQUEST['q']."' "
         .   "OR `Genre` like '".$_REQUEST['q']."' "
         .   "OR `Title` like '".$_REQUEST['q']."';";

Ответы [ 4 ]

2 голосов
/ 20 апреля 2010

Добавьте % до и после поискового запроса, в кавычках:

WHERE Artist like '%".$_REQUEST['q']."%'

Это будет искать [что угодно] битлз [что угодно]

0 голосов
/ 20 апреля 2010

Запрос LIKE позволяет использовать символы подстановки SQL (% и _). В противном случае он действует точно так же, как если бы вы использовали обычное сравнение «равно»:

SELECT .... WHERE somefield LIKE 'beatles';
SELECT .... WHERE somefield='beatles';

действуют точно так же, тогда как

SELECT .... WHERE somefield LIKE 'beatles%';

находит любую запись, где somefield начинается с 'beatles', а

SELECT .... WHERE somefield='beatles%';

найдет только записи, содержащие буквальную строку 'beatles%' (и обратите внимание, что% не рассматривается как символ подстановки).

0 голосов
/ 20 апреля 2010

Вам необходимо защитить от SQL-инъекций. Что если кто-то введет:

'; DROP DATABASE music; --

или что-то подобное?

0 голосов
/ 20 апреля 2010

Возможно, вы захотите проанализировать ввод вашего пользователя и очистить его. Избавьтесь от таких слов, как «the», и просто используйте важные слова в запросе, например «beatles».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...