Найдено простое решение: регистронезависимый поиск для SQLite
Главная → Просто о сложном → Для веб-программистов → Найдено простое решение: регистронезависимый поиск для SQLite
Периодически мы сталкиваемся с проблемой, что в SQlite по умолчанию оператор LIKE регистрозависим.
Как же выйти из положения?
Причем стандартные решения не подходят...
Но мы нашли простой и действенный метод! Работает на любых хостингах!
Шаг1: задаем новую функцию (можно в конструкторе прописать)
$this->dbh->sqliteCreateFunction('U_LOWER', "u_strtolower", 1);
Шаг2: пишем SQL запрос
$sql = "SELECT * FROM items WHERE u_lower(name) LIKE ('%". mb_strtolower($search) ."%') ";
где видно, что мы:
добавили свою функцию к полю name u_lower
добавили mb_strtolower
Таким образом перевели в нижний регистр все!
Кстати если функции нет, то ее можно создать (и нужно):
if (!function_exists('u_strtolower')) {
function u_strtolower($str) {
return mb_strtolower($str, 'UTF-8');
}
}