详情页

帝国cms 多条件查询之IN查询

时间:2023年09月17日

编辑:佚名

在帝国cms中,偶然需要用到in查询,也就是多条件查询中的:

在使用这个的时候,发现IN查询并不能查询到我的结果,于是翻找PHP代码,发现下面的函数里需要修改!
function SearchDoKeyboard($f,$hh,$keyboard){
  // print_r($keyboard);echo "<br>";
  $where='';
  $keyboard=SearchDoKeyboardVar($keyboard);
  if(empty($keyboard))
  {
    return "";
  }
  if(!empty($hh))
  {
    if($hh=='LT')//小于
    {
      $where=$f."<'".$keyboard."'";
    }
    elseif($hh=='GT')//大于
    {
      $where=$f.">'".$keyboard."'";
    }
    elseif($hh=='EQ')//等于
    {
      $where=$f."='".$keyboard."'";
    }
    elseif($hh=='LE')//小于等于
    {
      $where=$f."<='".$keyboard."'";
    }
    elseif($hh=='GE')//大于等于
    {
      $where=$f.">='".$keyboard."'";
    }
    elseif($hh=='NE')//不等于
    {
      $where=$f."<>'".$keyboard."'";
    }
    elseif($hh=='IN')//包含
    {
      
      $kr=explode(' ',$keyboard);
      $kcount=count($kr);
      $kbs='';
      $dh='';
      
      for($i=0;$i<$kcount;$i++)
      {
        $kr[$i]=(float)$kr[$i];
        // print_r($kr[$i]);echo "<br>";
        if(empty($kr[$i]))
        {
          continue;
        }
        if($kbs)
        {
          $dh=',';
        }
        $kbs.=$dh."'".$kr[$i]."'";
      }
      if($kbs)
      {
        $where=$f." IN (".$kbs.")";
      }
      else
      {
        return '';
      }
    }
    elseif($hh=='BT')//范围
    {
      $keyboard=ltrim($keyboard);
      if(!strstr($keyboard,' '))
      {
        return '';
      }
      $kr=explode(' ',$keyboard);
      $kr[0]=(float)$kr[0];
      $kr[1]=(float)$kr[1];
      if(!trim($kr[0])||!trim($kr[1]))
      {
        return '';
      }
      $where=$f." BETWEEN '".$kr[0]."' and '".$kr[1]."'";
    }
    else//相似
    {
      $where=$f." LIKE '%".$keyboard."%'";
    }
  }
  else
  {
    $where=$f." LIKE '%".$keyboard."%'";
  }
  return $where;
}
只需要将下面代码注释掉即可:
$kr[$i]=(float)$kr[$i];
这个代码会将字符串类转换为浮点类型,导致接下来的数据判断为空,所以只需要注释掉这行代码即可
直接搜索,搜索到删掉这行或者注释就行
相关文章
猜你需要