Я пытаюсь найти поле name в своей базе данных, используя LIKE .  Если я создаю SQL «вручную» следующим образом: 
 $query = "SELECT * \n" . "FROM `help_article` \n" . "WHERE `name` LIKE '%how%'\n" . ""; $sql = $db->prepare($query); $sql->setFetchMode(PDO::FETCH_ASSOC); $sql->execute(); 
  Затем он вернет соответствующие результаты для «как». 
  Однако, когда я превращаю его в подготовленное заявление: 
 $query = "SELECT * \n" . "FROM `help_article` \n" . "WHERE `name` LIKE '%:term%'\n" . ""; $sql->execute(array(":term" => $_GET["search"])); $sql->setFetchMode(PDO::FETCH_ASSOC); $sql->execute(); 
Я всегда получаю нулевые результаты.
Что я делаю не так? Я использую подготовленные заявления в других местах моего кода, и они работают нормально.
  Связанные :placeholders не должны быть заключены в одинарные кавычки.  Таким образом, они не будут интерпретироваться, но рассматриваются как необработанные строки. 
  Если вы хотите использовать его как шаблон LIKE , передайте % вместе со значением: 
 $query = "SELECT * FROM `help_article` WHERE `name` LIKE :term "; $sql->execute(array(":term" => "%" . $_GET["search"] . "%")); 
  О, и на самом деле вам нужно сначала очистить входную строку (addcslashes).  Если пользователь поставляет какие-либо посторонние символы % в этом параметре, они становятся частью шаблона соответствия LIKE.  Помните, что весь параметр :term передается как строковое значение, и все % s внутри этой строки становятся заполнителями для предложения LIKE.