此查询无法从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_content
和article_title
表中都有行,那么问题是什么?
答案 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.