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

标签 php mysql search pdo prepared-statement

我目前有一个简单的搜索引擎,它根据用户的输入在我的数据库中搜索列:

$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

 }

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

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

编辑:

后来我把它改成了这个...

   $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(); 

关于php - PDO - 搜索是查询整个术语而不是单独查询每个术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12451091/

相关文章:

php - Laravel 中的数组推送

php - 如何在运行 cronjob PHP 脚本时处理 CPU IO 峰值

mysql - 查询得到的结果我不明白

php - Levenshtein 在 MySQL 中运行缓慢吗?

python - 我希望能够使用日期查找特定的数据

mysql - 使用包含多个 EXIST() 语句的查询计算索引存在的次数

php - 在 laravel 中生成 View 时如何使 php 变量保持不变?

php - 你知道我可以研究的任何使用命名空间的 PHP 项目吗?

mysql - 我可以使用 LIKE 两次吗?

mysql - 如何在 MySQL 中替换包含反斜杠的字符串