【发布时间】:2012-10-24 06:17:19
【问题描述】:
网站用户使用搜索表单来查询产品数据库。输入的关键字在数据库中搜索产品的标题。
public function startSearch($keywords){
$keywords = preg_split('/[\s]+/', $keywords);
$totalKeywords = count($keywords);
foreach($keywords as $key => $keyword){
$search .= '%'.$keyword.'%';
if($key != ($totalKeywords)-1){
$search .= ' AND itemTitle LIKE ';
}
}
$sql=$this->db->prepare("SELECT * FROM prodsTable WHERE itemTitle LIKE ?");
$sql->bindParam(1, $search);
$sql->execute ();
$sql->fetchALL(PDO::FETCH_ASSOC);
如果用户输入单个关键字,则搜索有效,但如果使用多个关键字,则不会执行查询。
如果: $keywords = '苹果 ipod'; $search = '%apple% AND itemTitle LIKE %ipod%';
所以准备好的语句应该是这样的:
"SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% AND itemTitle LIKE %ipod%"
当两个产品应返回标题中同时包含“apple”和“ipod”时,不会返回任何结果。
我做错了什么?
【问题讨论】:
-
"SELECT * FROM prodsTable WHERE itemTitle LIKE '%apple%' AND itemTitle LIKE '%ipod%'"。你喜欢的模式被引用了吗? -
在 foreach 语句中,它是 '%'.$keyword.'%',它返回以下准备好的语句: SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% 有效。但是,当添加第二个或第三个关键字时,$search 变量变为:'%'.$keyword.'%' AND itemTitle LIKE --> 给出准备好的语句:SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% AND itemTitle LIKE %ipod% 不起作用。添加多个关键字不会提供结果。我已经尝试过: itemTitle LIKE '%aple%' 但这也不起作用。我准备的没有引号的原件有效。
-
bindParam会在需要时添加引号,所以没关系 -
一旦关键字搜索有效。不止一个没有。这是执行的确切语句,但没有结果。 SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% AND itemTitle LIKE %ipod%