LIKE查询无法检索数据,为什么?

时间:2014-03-11 18:00:29

标签: php mysql sql

此查询无法从MySQL中检索任何数据,原因是无数小时后我无法弄清楚..

public function search()
{
  if(isset($_GET['search']))
  {
    $searchTerms = trim(strip_tags($_GET['search']));

    $sth = $this->db->prepare("SELECT COUNT(*) FROM articles WHERE (article_content LIKE :search) OR (article_title LIKE :search)");
    $sth->execute( array(':search' => '%' . $searchTerms . '%') );

    if($sth->fetchColumn() > 0)
    {
      while($row = $sth->fetchAll(PDO::FETCH_ASSOC))
      {
        return "search results: " . $row['article_title'];
        return "" . $row['article_content'];
      }
    } else {
      echo "No results.";
    }
  }
}

无论我在表单中键入什么关键字,它始终返回“无结果”。可能是什么问题,因为我可以看到它应该工作..

从表格结构中选择所有行并进行计数,以便fetchColumn可以运行,它从正确的表格articles)中选择,其中article_contentarticle_title表中都有行,那么问题是什么?

3 个答案:

答案 0 :(得分:0)

$sth->execute(array(':search' => '%'.$searchTerms.'%'));

应该是:

$sth->execute(array(':search' => '\'%\' + \''.$searchTerms.'\' + \'%\''));

答案 1 :(得分:0)

每个绑定var都需要是一个单独的绑定var,即使在命名时也是如此,即使它们都包含相同的值:

$sth = $this->db->prepare(
    "SELECT COUNT(*) 
       FROM articles 
      WHERE (article_content LIKE :search1) 
         OR (article_title LIKE :search2)"
);
$sth->execute( 
    array(
        ':search1' => '%' . $searchTerms . '%', 
        ':search2' => '%' . $searchTerms . '%'
    ) 
);

答案 2 :(得分:0)

Try this:

$sth = $this->db->prepare("SELECT COUNT(*) FROM articles WHERE (article_content LIKE :search0) OR (article_title LIKE :search1)");

$searchstring="%" . $searchTerms . "%";

$sth->execute( array(':search0' =>$searchstring ,':search1'=>$searchstring) );

pdo fails to retrieve values when the same placheholder is repeated in a query with LIKE in it.
相关问题