我发现布尔全文搜索非常有帮助,但由于某些原因,我无法弄清楚为什么我的查询得不到结果。
我的疑问如下:
if(isset($_REQUEST['fname']) and $_REQUEST['fname']!=""){
$condition .= ' AND MATCH (fname, lname, mname) AGAINST('.(+$_REQUEST['fname']).' IN BOOLEAN MODE) ' ;
}通过该函数进行备份;
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搜索。
发布于 2019-11-15 06:45:56
您的问题出在表达式的这一部分:
(+$_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']}"。
https://stackoverflow.com/questions/58867507
复制相似问题