Как вы выполняете нечеткие поиски с использованием связанных параметров в PDO?
Попытка сделать такое...
WHERE username LIKE '%$str%'
... но используя связанные параметры для подготовленных операторов в PDO. например:.
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();
Я пробовал множество перестановок одинарных кавычек и знаков%, и он просто перекрещивался со мной.
Кажется, я вспоминаю борьбу с этим в какой-то момент раньше, но я не могу найти никаких ссылок. Кто-нибудь знает, как (если?) Вы можете сделать это в PDO с именованными параметрами?
Ответы
Ответ 1
Ах. Нашел комментарий на php.net, который напомнил мне ответ; вам нужно подстановить свое значение перед оценкой bindParam и не беспокоиться о его цитировании. Так, например, это прекрасно работает:
$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();
Ответ 2
5 лет спустя, если кто-то еще наткнется на это, есть альтернативный метод, который я обнаружил. Принятое решение было не совсем выполнимо для моей ситуации, но этот метод, похоже, также выполняет свою работу:
$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();
Я не уверен, произойдет ли поражение производительности из-за накладных расходов на вызов функции CONCAT
, но я хотел бы передать это как вариант. Надеюсь, это поможет кому-то.