繁体   English   中英

PHP MYSQL Boolean 全文检索

[英]PHP MYSQL Boolean Full-text search

我发现 Boolean 全文搜索很有帮助,但由于某种原因,我无法弄清楚为什么我的查询没有得到结果。

我的查询如下:

if(isset($_REQUEST['fname']) and $_REQUEST['fname']!=""){
    $condition  .=  ' AND MATCH (fname, lname, mname) AGAINST('.(+$_REQUEST['fname']).' IN BOOLEAN MODE) ' ;
}

由这个 function 支持;

public function get($tableName,  $whereAnd  =   array(), $whereOr   =   array(), $whereLike =   array())
{
$cond   =   '';
$s=1;
$params =   array();
foreach($whereAnd as $key => $val)
{
    $cond   .=  " And ".$key." = :a".$s;
    $params['a'.$s] = $val;
    $s++;
}
foreach($whereOr as $key => $val)
{
    $cond   .=  " OR ".$key." = :a".$s;
    $params['a'.$s] = $val;
    $s++;
}
foreach($whereLike as $key => $val)
{
    $cond   .=  " OR ".$key." like '% :a".$s."%'";
    $params['a'.$s] = $val;
    $s++;
}
  $stmt = $this->pdo->prepare("SELECT  $tableName.* FROM $tableName WHERE 1 ".$cond);
    try {
        $stmt->execute($params);
        $res = $stmt->fetchAll();

        if (! $res || count($res) != 1) {
           return $res;
        }
        return $res;
    } catch (\PDOException $e) {
        throw new \RuntimeException("[".$e->getCode()."] : ". $e->getMessage());
    }
}

public function getAllRecords($tableName, $fields='*', $cond='', $orderBy='', $limit='')
{
    //echo "SELECT  $tableName.$fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
    //print "<br>SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
    $stmt = $this->pdo->prepare("SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit);
    //print "SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." " ;
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $rows;
}

然后是搜索栏:

<input type="text" name="fname" id="fname" class="form-control" value="" placeholder="Search By Name">

但是,当我搜索时,无论是单独搜索fname还是fname+lname ,我都没有得到任何结果。

您的问题出在表达式的这一部分:

(+$_REQUEST['fname'])

当您在值前面添加+时,PHP 会尝试将其转换为数值并(因为它可能是一个单词)给出非数值警告并返回 0。我认为您的意思是将+放入整体表达即

$condition .= " AND MATCH (fname, lname, mname) AGAINST('+{$_REQUEST['fname']}' IN BOOLEAN MODE) ";

一个准备好的陈述会帮助你避免这些问题,写作

$condition .= " AND MATCH (fname, lname, mname) AGAINST(? IN BOOLEAN MODE) ";

然后将参数绑定到"+{$_REQUEST['fname']}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM