Итак, у меня есть этот веб-сайт с функцией поиска, которая ищет таблицу в моей базе данных mysql. База данных на данный момент насчитывает 1108 строк. Он содержит информацию о музыке, такую как исполнитель и альбом. Поскольку каждый персонаж может быть в имени исполнителя или имени альбома, я кодировал каждую из этих переменных перед добавлением в базу данных. Смотрите ниже:
$artist = urlencode($_POST['artist']);
$album = urlencode($_POST['album']);
Итак, теперь давайте представим, что я добавил новую запись в базу данных, и она содержит символы, которые необходимо кодировать. База данных показывает это нормально.
Теперь я хочу пойти искать.
Иностранные символы работали. Вы можете увидеть здесь: http://albumarrrt.net/details.php?artist=Ai%20Otsuka нажав на ссылку альбома для каждой из работ.
Но теперь возникает несколько проблем.
1 - Если вы ищете '&', при поиске читается% 26 как ничего. Он показывает% 26 в адресной строке, но он читает его как ничего.
Вот как это читается:
$search = $_GET['search'];
if($search == '') {
echo "Please enter a search term :(";
}
Это единственное, что делается с $ search до того, как он начнет считываться базой данных.
2 - Если вы ищете одинарные или двойные кавычки, это делает странный пример:
Поиск "и получить не найдено совпадений
для "% 5C% 5C% 26quot% 3B" Найти '
и не найдено совпадений для
"% 5C% 5C% 26% 23039% 3B" * * тысяча двадцать два
Я не понимаю, почему это происходит, потому что база данных содержит только код для цитаты и ничего больше.
Это единственные две вещи, которые я нашел неправильно в своих поисках. Может быть, я просто слишком долго смотрел на это и не могу понять, но это сбивает с толку мое, почему он не читает «&» как что-либо.
На мой последний вопрос.
Мой текущий метод поиска отделяет каждое слово и добавляет% вокруг него, а затем использует оператор LIKE для поиска совпадений. Пример:
Поиск: куча вещей (слово)
запрос mysql будет выглядеть так:
SELECT * FROM TABLE WHERE (album LIKE '%A%' AND album LIKE '%bunch%' AND album LIKE '%of%' AND album LIKE '%Stuff%' AND album LIKE '%%28word%29%') OR (artist LIKE '%A%' AND artist LIKE '%bunch%' AND artist LIKE '%of%' AND artist LIKE '%Stuff%' AND artist LIKE '%%28word%29%')
Очевидно, что это создает большую нагрузку на сервер, и я знаю, что использование операторов LIKE для такого поиска в большой базе данных является плохой идеей, так какой же будет альтернативный способ поиска FULL TEXT или какого-то другого метода?
Извините за огромное количество вопросов, но все они как бы идут рука об руку друг с другом.
редактирование:
Хорошо, я исправил свою базу данных, но все еще есть несколько вопросов.
Кто-то предложил преобразовать мой текст из utf8 в обычный utf, как мне это сделать?
и у меня все еще есть проблема со знаком &.
например:
если вы выполняете поиск в & google, это работает, однако на моем сайте мой результат POST для поискового запроса ничего не показывает при поиске &.