php多关键字搜索

标签 php mysql search

需要帮助我的 php 搜索多个关键字,下面的代码没有显示任何结果,但是当我删除explode 函数和 foreeach 构造时,它可以工作,但只显示 1 个关键字的结果。

例如,我在一列中有一个关键字列表: 苹果,红色,蓝色,书,黄色的鸟。

使用下面的代码,如果我在搜索框中输入 red apple,它将不会产生任何结果,我希望它显示包含我输入的关键字的所有结果。谢谢

$search = $_POST['search'];
$search = strtoupper($search); 
$search = strip_tags($search); 
$search = trim ($search); 
$search = explode(",",$search);

$query=$db->prepare("SELECT * FROM thread WHERE title like '%".$search."%' OR keyword like '%".$search."%' OR description like '%".$search."%'");
foreach($search as $k)
{$query=$db->prepare("OR keyword LIKE '%$k%' OR title LIKE '%$k%' OR description LIKE '%$k%'");}
$query->execute(array('title' => $search, 'description'=>$search, 'keyword'=>$search));
$query->setFetchMode(PDO::FETCH_ASSOC); 

$List="";   

if($query->rowCount()<1)
    {$List.="<div class='containerr'>No results found.</div>";}
else
{

while($row=$query->fetch())
{
    $vid=$row['id'];
    $user=$row['username'];
    $preview=$row['preview'];
    $names=$row['names'];
    $good=$row['good'];
    $date=$row['date'];
    $date=date('M-d-Y', strtotime($date));
    $title=$row['title'];

$List.='<div class="LISTT"><a href="mp.php?id='.$vid.'">'.$preview.'<br/>
                        <label>'.$title.'</label><br/>
                        <label style="color:black;">Added:</label> <label style="color:#666666">'.$date.'</label></a></div>';
}

最佳答案

问题是,您覆盖了 SQL,而不是附加到它。除此之外,您还运行标题搜索来查找冗余组合值,我想这不是您想要的。试试这个:

$search = $_POST['search'];
$search = strtoupper($search); 
$search = strip_tags($search); 
$search = explode(",",$search);

$sql=array("SELECT * FROM thread WHERE ");
foreach($search as $k) {
  $k=trim($k);
  $sql[]="keyword LIKE '%$k%' OR title LIKE '%$k%' OR description LIKE '%$k%'";
}
$sql=implode(' OR ', $sql);
$query=$db->prepare($sql);
$query->execute(array());
$query->setFetchMode(PDO::FETCH_ASSOC);

关于php多关键字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28974997/

相关文章:

javascript - 在500篇文章中实时搜索关键字的最快方法

php - 是否可以在 mysql 中将结果列分成两列

php - 在 pusher.com 中的一次身份验证调用中对多个专用 channel 进行身份验证

MySql过滤查询

mysql - 在将记录插入数据库表之前检查

mysql POINT 数据类型上的左连接

Python imapclient 使用多个操作数进行搜索

php - 在使用 php 插入 sql 之前检查记录

PHP:html_entity_decode 删除/不显示字符

Java - JCheckBox 针对列表进行过滤