簡體   English   中英

PDO - 搜索是整體查詢術語而不是單獨查詢每個術語

[英]PDO - Search is querying terms as whole rather than each term separately

我目前有一個簡單的搜索引擎,它根據用戶的輸入搜索我的數據庫中的列:

$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',"%".$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(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM