加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – PDO – 搜索是整体查询术语而不是单独查询每个术语

发布时间:2020-12-13 22:45:05 所属栏目:PHP教程 来源:网络整理
导读:我目前有一个简单的搜索引擎,它根据用户的输入搜索我的数据库中的列: $search = $_GET['search'];$terms = explode(" ",$search); $sql = "SELECT * FROM people WHERE lname LIKE :search"; $q = $conn-prepare($sql) or die("failed!"); $q-bindValue(':s
我目前有一个简单的搜索引擎,它根据用户的输入搜索我的数据库中的列:

$search = $_GET['search'];
$terms = explode(" ",$search);

        $sql = "SELECT * FROM people WHERE lname LIKE :search";
    $q   = $conn->prepare($sql) or die("failed!");
    $q->bindValue(':search',"%".$search."%",PDO::PARAM_STR);
    $q->execute();

 if ($q){

 //
 do something

 }

目前它正在搜索整个术语,例如“红色桌面”返回结果但“桌面红色”不返回任何内容

有任何想法吗?任何帮助非常感谢!

编辑:

我已经改变了这个……

$search = $_GET['search'];
   $terms = explode(" ",$search);

        $sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST  (:search IN BOOLEAN MODE)";
    $q   = $conn->prepare($sql) or die("failed!");
    $q->bindValue(':search',PDO::PARAM_STR);
    $q->execute();

它现在似乎工作正常,如果有人能提出更好的解决方案我会非常感激!

解决方法

这可能不是最好的方法,但我认为这样的事情可能会起作用.我本想知道是否有更聪明的方法来做到这一点!

$search = $_GET['search'];
$terms = explode(" ",$search);

$sql = "SELECT * FROM people"
if(count($terms) > 0) {
  $sql .= " WHERE (lname LIKE '%:term_0%' OR fname LIKE '%:term_0%')";
  for($i = 1; $i < count($terms); $i++)
    $sql .= " AND (lname LIKE '%:term_" . $i . "%' OR fname LIKE '%:term_" . $i . "%')";
}

$q = $conn->prepare($sql) or die("failed!");

for($i = 0; $i < count($terms); $i++)
  $q->bindValue(':term_' . $i,$terms[$i]);
$q->execute();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读