WapStyle » 2023.01.23 19:48

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

Код:

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).'[[:>:]]"

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

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

Gemorroj » 2023.01.24 09:46

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

Код:

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

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

НЕЗНАЙКА » 2023.01.28 21:24

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

WapStyle » 2023.02.04 09:46

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?
вроде заебись всё уберает

Gemorroj » 2023.02.04 19:25

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

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

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

WapStyle » 2023.02.07 18:08

Код:

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  =D

Gemorroj » 2023.02.07 21:14

да, можно и так. хотя 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();