Как выполнять нечеткий поиск с использованием связанных параметров в PDO?
Вопрос
Пытаюсь сделать что-то подобное...
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
функция, но я хотел передать это как опцию.Надеюсь, это поможет кому-то.