Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как найти записи по части строки

Короткий ответ

Знаки % добавляют к значению, а не к запросу:

<?php
 
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE products (id INTEGER PRIMARY KEY, title TEXT, price INTEGER)');
$pdo->exec("INSERT INTO products (title, price) VALUES ('Tea', 250), ('Coffee', 400), ('Juice', 180), ('Green tea', 300)");
 
$statement = $pdo->prepare('SELECT title FROM products WHERE title LIKE ?');
$statement->execute(['%tea%']);
 
echo implode(', ', $statement->fetchAll(PDO::FETCH_COLUMN));

Результат:

Tea, Green tea

Знаки % и _ в запросе пользователя

В LIKE знак % означает «любые символы», а _ — «один символ». Чтобы искать их буквально, экранируйте:

<?php
 
$search = '50%_off';
 
echo str_replace(['\\', '%', '_'], ['\\\\', '\%', '\_'], $search);

Результат:

50\%\_off

Большие таблицы

Поиск с % в начале не использует индекс и на больших таблицах работает медленно. Для них применяют полнотекстовый поиск.

Функции из этого ответа

  • PDO — Подключение к базе данных.
  • PDOStatement — Подготовленный запрос и его результат.
  • str_replace — Заменяет все вхождения подстроки на другую строку.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.