Как создать параметризованный запрос PDO с оператором LIKE?
вот моя попытка:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
6 ответов
понял это сразу после того как я написал:
$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
.
Edit: альтернативный синтаксис, который я нашел, заключается в использовании оператора конкатенации:|/, поэтому он станет просто:
where column like '%' || :something || '%' etc
@bobince упоминает здесь что:
в сложности приходит, когда вы хотите разрешить литерал
%
или_
персонаж строка поиска, не имея его в качестве подстановочного знака.
так что это что-то еще, чтобы следить за при объединении like и параметризации.
$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);
PDO избегает " % " (может привести к SQL-инъекции): использование предыдущего кода даст результаты желания при поиске соответствия частичным строкам но если посетитель вводит символ "%" вы все равно получите результаты, даже если у вас нет ничего, хранящихся в базе данных (это может привести к SQL-инъекции)
Я пробовал много вариантов все с тем же результатом PDO избегает "%" ведущих нежелательных/невозбужденных результатов поиска.
Я хоть стоит поделиться, если кто-то нашел слово вокруг него, пожалуйста, поделитесь им