php单表多字段多关键字搜索的类适用于小型网站和后台

来源:互联网 发布:mac酷狗怎么切换歌曲 编辑:程序博客网 时间:2024/05/21 10:20

这里发一个自己写的php搜索的类,数据表庞大的话当然是不适合用这个的,会比较慢,但是对于很多地方还是适用的,并且查询到的结果,其关键字可以高亮显示

/* 这是一个多关键字多字段单表搜索的类  * 张伟2012-09-23  qq:3340971  */ class Search{ private $host='localhost'; private $user='root'; private $pwd='123456'; private $conn; private $dbname='hshb2c_com'; private $charset='utf8'; public $tips='';//提示信息 public static $limit="/[\+&\s]+/";//分割符号 public static $arrKey=array(); private static $instance; public static function getInstance(){ if(!self::$instance instanceof self){ self::$instance=new self(); } return self::$instance; } private function __construct(){ date_default_timezone_set('Asia/Shanghai'); $this->conn=@mysql_connect($this->host,$this->user,$this->pwd); if(!$this->conn){ $this->tips='数据库连接失败!'.mysql_error(); return false; } mysql_query("SET NAMES '{$this->charset}'"); mysql_query("SET CHARACTER_SET_CLIENT='{$this->charset}'"); mysql_query("SET CHARACTER_SET_RESULTS='{$this->charset}'");  if(!mysql_select_db($this->dbname,$this->conn)){ $this->tips='不存在数据库:'.$this->dbname.',请核对后再试!'.mysql_error(); return false; } } /*执行单表查询并返回结果(二维数组) *$str:http提交的要查询的字符串 */  public function query($str,$tbname,$arrSearchField,$arrShowField){ $str=self::createLike($str,$arrSearchField); foreach(self::$arrKey as $v){ $arrReplaceField[]='<font color="red">'.$v.'</font>'; } $list_field=implode("`,`",$arrShowField); $list_field="`$list_field`"; $sql="SELECT $list_field FROM `$tbname` WHERE $str"; $result=mysql_query($sql,$this->conn); $num=mysql_num_rows($result); $item=array(); $num_field=count($arrShowField); if($num!=0){ $i=0; while($row=mysql_fetch_assoc($result)){ for($j=0;$j<$num_field;$j++){ if(in_array($arrShowField[$j],$arrSearchField)){ $fieldValue=str_replace(self::$arrKey,$arrReplaceField,$row[$arrShowField[$j]]); }else{ $fieldValue=$row[$arrShowField[$j]]; } $item[$i][$arrShowField[$j]]=$fieldValue; } $i++; } return $item; }else{ return false; }  } //生成多个字段的like查询条件 public static function createLike($str,$arrSearchField){ self::$arrKey=preg_split(self::$limit,$str); $strLike=""; foreach($arrSearchField as $v1){ foreach(self::$arrKey as $v2){ $strLike.="`$v1` LIKE '%$v2%' OR "; } } return substr($strLike,0,-4); } }


原创粉丝点击