Поиск по нескольким словам не работает почему
делаю поиск. Все работает если только одно слово указать, а если несколько через пробел, то не ищет. Не подскажите, в чем дело?
<?php
function connectDatabase($host = 'localhost', $user = 'root', $password = '', $db_name = 'food') {
return new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $password);
}
function search($search_word) {
$link = connectDatabase();
$is_email_exist = $link->prepare("SELECT `id`, `photo_path`, `owner_id`, `timestamp_created`, `title`, `description` FROM `food` WHERE `title` LIKE :search_text");
$is_email_exist->execute(array(':search_text' => '%'.$search_word.'%'));
$arr = array();
while($row1 = $is_email_exist->fetch(PDO::FETCH_ASSOC)) {
$arr[] = $row1;
}
return $arr;
}
var_dump(search('test'));
?>
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Чтобы это работало корректно, нужно для каждого слова писать column LIKE '%WORD%'
Во-первых надо разбить строку на пробелы (использовать explode())
Во-вторых надо сформировать строку column1 LIKE ? OR column1 LIKE ? OR column2 LIKE ? по количеству элементов в массиве (использовать str_repeat)
А потом подставить массив в запрос, типа
$query = $dbh->prepare('SELECT * FROM table WHERE column1 LIKE ? OR column1 LIKE ? OR column2 LIKE ?');
$query->execute(array("%$word1%","%$word1%",.....));
Используя массив из разбитых слов, в которые добавлены проценты
$string = 'test test2 test3';
$explodedArr = explode(' ', $string);
$mappedArr = array_map(function($item) {
return "%{$item}%";
}, $explodedArr);
print_r($mappedArr);
Array
(
[0] => %test%
[1] => %test2%
[2] => %test3%
)