#1 2023.01.23 19:48

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Поиск в БД через LIKE или REGEXP

Короч с базы бот берёт поиск по запросу
/Поиск название
ответ реализовал сначала так

Код:

1
WHERE track LIKE "%'.filter_var($_GET['search'], FILTER_SANITIZE_FULL_SPECIAL_CHARS).'%"

выдаёт много говна похожего на слово, даже если оно в середине текста
попробовал так

Код:

1
WHERE track REGEXP "[[:<:]]'.filter_var($_GET['search'], FILTER_SANITIZE_FULL_SPECIAL_CHARS).'[[:>:]]"

Если сказать ему одно слово выдаст то что надо, НО
если в запросе дать два слова с пробелом, вывалит тоже кучу ненужного "Добра"

Как запросить нормально чтобы выдало что что просишь?

Неактивен

#2 2023.01.24 09:46

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

во 1 не используй filter_var, а используй специализированные функции для работы со sql (https://www.php.net/manual/ru/pdo.prepa … ements.php).

Код:

1
WHERE track LIKE "%text1%" OR track LIKE "%text2%"

т.е. разбивай текст по пробельным символам.

Неактивен

#3 2023.01.28 21:24

НЕЗНАЙКА
Участник
Откуда: Россия
Зарегистрирован: 2008.11.24
Сообщений: 313
Карма: 11
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

Более того, если поиск важен (частая работа с текстом) можно использовать FULLTEXT индекс. Думаю, гугл подскажет, если заинтересует


ДАУН-Данная Аватара Унаследована Незнайкой

Неактивен

#4 2023.02.04 09:46

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

Gemorroj написал:

во 1 не используй filter_var, а используй специализированные функции для работы со sql (https://www.php.net/manual/ru/pdo.prepa … ements.php).

Код:

1
WHERE track LIKE "%text1%" OR track LIKE "%text2%"

т.е. разбивай текст по пробельным символам.

почему не использовать filter_var?
вроде заебись всё уберает

Неактивен

#5 2023.02.04 19:25

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

WapStyle https://www.php.net/manual/ru/filter.fi … nitize.php
FILTER_SANITIZE_FULL_SPECIAL_CHARS -

Эквивалентно вызову htmlspecialchars() с установленным параметром ENT_QUOTES.

это никак не защита от sql injection.

Неактивен

#6 2023.02.07 18:08

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

Код:

1
2
3
4
$stmt = $db->prepare('SELECT * FROM icecast2 WHERE hash = :hash AND file_id IS NOT NULL LIMIT 1');
$stmt->bindParam(':hash', $_GET['id'], PDO::PARAM_STR);
$stmt->execute();
$files = $stmt->fetch(PDO::FETCH_ASSOC);

а так?
это вариант https://chat.openai.com/chat  big_smile

Отредактировано WapStyle (2023.02.07 18:08)

Неактивен

#7 2023.02.07 21:14

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Поиск в БД через LIKE или REGEXP

да, можно и так. хотя prepare полаконичнее.

Код:

1
2
3
$stmt = $db->prepare('SELECT * FROM icecast2 WHERE hash = :hash AND file_id IS NOT NULL LIMIT 1');
$stmt->execute(['hash' => $_GET['id']]);
$files = $stmt->fetch();

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.014 s