Вот моя попытка:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"'); $query->execute(array('value')); while ($results = $query->fetch()) { echo $results['column']; }
Выяснил это сразу после того, как я опубликовал:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%')); while ($results = $query->fetch()) { echo $results['column']; }
Чтобы использовать «Нравится» с частичным совпадением%, вы также можете сделать это: column like concat('%', :something, '%')
(другими словами, используя явно неэкранированные знаки%, которые определенно не являются пользователем) с именованным параметром :something
.
Изменить: Альтернативный синтаксис, который я нашел, – это использовать оператор конкатенации: ||, поэтому он станет простым: where column like '%' || :something || '%' etc
where column like '%' || :something || '%' etc
@bobince упоминает здесь, что:
Трудность возникает, когда вы хотите разрешить буквенный символ
%
или_
в строке поиска, не действуя в качестве подстановочного знака.
Так что это еще что-то, на что можно обратить внимание при объединении вроде и параметризации.
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->bindValue(1, "%$value%", PDO::PARAM_STR); $query->execute(); if (!$query->rowCount() == 0) { while ($results = $query->fetch()) { echo $results['column'] . "<br />\n"; } } else { echo 'Nothing found'; }
Вы также можете попробовать это. Я сталкиваюсь с подобной проблемой, но получил результат после исследования.
$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search'); $stmt= $pdo_connection->prepare($query); $stmt->execute(array(':search' => '%'.$search_term.'%')); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($result);
Это работает:
search `table` where `column` like concat('%', :column, '%')
PDO ускоряет «%» (может привести к внедрению sql) : использование предыдущего кода даст результаты поиска, если вы хотите совместить частичные строки, но если посетитель набирает символ «%», вы все равно получите результаты, t что-либо хранится в базе данных (это может привести к инъекциям sql)
Я пробовал много вариаций с одним и тем же результатом. PDO избегает «%» ведущих нежелательных / невозбужденных результатов поиска.
Я, хотя стоило поделиться, если кто-нибудь нашел слово вокруг, пожалуйста, поделитесь им