首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP MYSQL布尔全文搜索

问PHP MYSQL布尔全文搜索
EN

Stack Overflow用户
提问于 2019-11-15 06:32:45
回答 1查看 50关注 0票数 0

我发现布尔全文搜索非常有帮助,但由于某些原因,我无法弄清楚为什么我的查询得不到结果。

我的疑问如下:

代码语言:javascript
复制
if(isset($_REQUEST['fname']) and $_REQUEST['fname']!=""){
    $condition  .=  ' AND MATCH (fname, lname, mname) AGAINST('.(+$_REQUEST['fname']).' IN BOOLEAN MODE) ' ;
}

通过该函数进行备份;

代码语言:javascript
复制
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;
}

然后搜索字段:

代码语言:javascript
复制
<input type="text" name="fname" id="fname" class="form-control" value="" placeholder="Search By Name">

但是,当我搜索的时候,我没有得到任何结果,无论我是通过fname搜索还是通过fname+lname搜索。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 06:45:56

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

代码语言:javascript
复制
(+$_REQUEST['fname'])

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

代码语言:javascript
复制
$condition .= " AND MATCH (fname, lname, mname) AGAINST('+{$_REQUEST['fname']}' IN BOOLEAN MODE) ";

准备好的语句本可以帮助您避免这些问题,请编写

代码语言:javascript
复制
$condition .= " AND MATCH (fname, lname, mname) AGAINST(? IN BOOLEAN MODE) ";

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58867507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档