Как вы делаете нечеткий поиск, используя связанные параметры в PDO? - PullRequest
11 голосов
/ 13 сентября 2008

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

WHERE username LIKE '%$str%'

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 13 сентября 2008

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

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();
4 голосов
/ 13 марта 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...