Как выполнять нечеткий поиск с использованием связанных параметров в PDO?

StackOverflow https://stackoverflow.com/questions/60779

  •  09-06-2019
  •  | 
  •  

Вопрос

Пытаюсь сделать что-то подобное...

WHERE username LIKE '%$str%'

... но с использованием связанных параметров для подготовленных операторов в PDO.например.:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Я пробовал множество перестановок одинарных кавычек и знаков %, и меня это просто бесило.

Кажется, я помню, как когда-то боролся с этим, но не могу найти никаких упоминаний.Кто-нибудь знает, как (если?) Вы можете сделать это в PDO с именованными параметрами?

Это было полезно?

Решение

Ах.Нашел комментарий на php.net, который напомнил мне ответ;вам нужно подстановочный знак вашего значения перед оценкой связыванияParam и не беспокоиться о его цитировании.Так, например, это отлично работает:

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Другие советы

5 лет спустя, на случай, если кто-нибудь еще наткнется на это, я обнаружил альтернативный метод.Принятое решение было не совсем осуществимо для моей ситуации, но этот метод, похоже, также выполняет свою работу:

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

Я не уверен, что произойдет снижение производительности из-за накладных расходов на вызов CONCAT функция, но я хотел передать это как опцию.Надеюсь, это поможет кому-то.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top