Вы не зашли.
Главная » PHP » Поиск в БД через LIKE или REGEXP
#1. WapStyle Off (3)
Участник
2023.01.23 19:07
Короч с базы бот берёт поиск по запросу
/Поиск название
ответ реализовал сначала так
Код:
WHERE track LIKE "%'.filter_var($_GET['search'], FILTER_SANITIZE_FULL_SPECIAL_CHARS).'%"
выдаёт много говна похожего на слово, даже если оно в середине текста
попробовал так
Код:
WHERE track REGEXP "[[:<:]]'.filter_var($_GET['search'], FILTER_SANITIZE_FULL_SPECIAL_CHARS).'[[:>:]]"
Если сказать ему одно слово выдаст то что надо, НО
если в запросе дать два слова с пробелом, вывалит тоже кучу ненужного "Добра"

Как запросить нормально чтобы выдало что что просишь?
#2. Gemorroj Off (107)
Administrator
2023.01.24 09:09
во 1 не используй filter_var, а используй специализированные функции для работы со sql (https://www.php.net/manual/ru/pdo.prepa … ements.php).
Код:
WHERE track LIKE "%text1%" OR track LIKE "%text2%"
т.е. разбивай текст по пробельным символам.
#3. НЕЗНАЙКА Off (11)
Участник
2023.01.28 21:09
Более того, если поиск важен (частая работа с текстом) можно использовать FULLTEXT индекс. Думаю, гугл подскажет, если заинтересует
ДАУН-Данная Аватара Унаследована Незнайкой
#4. WapStyle Off (3)
Участник
2023.02.04 09:09
Gemorroj написал:
во 1 не используй filter_var, а используй специализированные функции для работы со sql (https://www.php.net/manual/ru/pdo.prepa … ements.php).
Код:
WHERE track LIKE "%text1%" OR track LIKE "%text2%"
т.е. разбивай текст по пробельным символам.
почему не использовать filter_var?
вроде заебись всё уберает
#5. Gemorroj Off (107)
Administrator
2023.02.04 19:07
WapStyle https://www.php.net/manual/ru/filter.fi … nitize.php
FILTER_SANITIZE_FULL_SPECIAL_CHARS -
Эквивалентно вызову htmlspecialchars() с установленным параметром ENT_QUOTES.
это никак не защита от sql injection.
#6. WapStyle Off (3)
Участник
2023.02.07 18:06
Код:
$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:06)
#7. Gemorroj Off (107)
Administrator
2023.02.07 21:09
да, можно и так. хотя prepare полаконичнее.
Код:
$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();
Страниц: 1
Главная
WEB
PunBB Mod v0.6.2
0.017 s