Как создать PDO-параметризованный запрос с помощью инструкции LIKE?

Вот моя попытка:

$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 избегает «%» ведущих нежелательных / невозбужденных результатов поиска.

Я, хотя стоило поделиться, если кто-нибудь нашел слово вокруг, пожалуйста, поделитесь им