PHP站内搜索:多关键字、加亮显示

摘要:
以下是三个示例:搜索以PHP开头:SELECT*FROMtableWHERE titleLIKE“PHP%”搜索以PHP结尾:SELECT*FROMtableWHERE title LIKE“%PHP”搜索包含PHP100:SELECT*FROMtTableWHERE titleLIKE“%PHP%”注意:%表示由0个或多个字符组成的字符串_表示单个字符。像元字符在正则表达式中的作用一样,可以在Like之后添加其他条件。像if语句示例˂?
一、SQL语句中的模糊查找
       主要通过LIKE(不区分大小写)关键字实现模糊查找。LIKE条件一般用在指定搜索某字段的时候, 通过"%"或者" _" 通配符的作用实现模糊查找功能,通配符可以在字段前面也可以在后面或前后都有。只通过LIKE是无法实现模糊查找的,因此通配符的作用不可忽略。

下面是三个实例:
搜索以PHP开头:
SELECT * FROM table WHERE title  LIKE  'PHP%' 

搜索以PHP结束:
SELECT * FROM table WHERE title  LIKE  '%PHP'

搜索包含PHP100:
SELECT * FROM table WHERE title  LIKE  '%PHP%' 

注:%表示0个或多个字符构成的字符串,_表示单个字符,类似于正则表达式中元字符的作用
在LIKE后面可以增加其他条件,类似于if语句
例子的数据库中的内容


<?php  
    $conn = @mysql_connect("localhost""root""") or die("数据库链接错误");  
    mysql_select_db("bbs", $conn);  
    mysql_query("set names 'utf-8'"); //使用utf8中文编码;  
      
    if($_GET['key']) {  
          
        $sql = "SELECT * FROM `text` WHERE content LIKE '%$_GET[key]%'";  
        $query = mysql_query($sql);  
          
        while($r=mysql_fetch_array($query)) {  
            echo "$r[content]"."<br>";  
        }  
    }  
      
?>  
  
<html>  
    <body>  
    <form action="" method="get">  
    关键字:  
    <input type="text" name="key" />  
    <input type="submit" name="sub" value="搜索" />  
    </form>  
    </body>  
</html>  


二、多个关键字搜索的原理和技巧
单个关键字搜索的步骤:提交表单->PHP文件接收关键字->执行SQL->输出结果
如果是多关键字的时候:在提交表单的时候将多个关键字用空格或+号分隔开,然后PHP文件接收到所提交的字符串后,通过一些函数如:explore函数将字符串拆分成多个关键字存放在数组中;然后就可以在数据库中通过多个LIKE模糊查找得到所要查找的内容。

三、替换关键字高亮显示
通过模糊查找得到所要的内容后,使用正则表达式替换所要查找的内容,可以通过改变颜色,加粗等改变显示的效果。

<?php  
    $conn = @mysql_connect("localhost""root""") or die("数据库链接错误");  
    mysql_select_db("bbs", $conn);  
    mysql_query("set names 'utf-8'"); //使用utf8中文编码;  
      
    if($_GET['key']) {  
        $k = explode(" ", $_GET[key]);  
          
        $sql = "SELECT * FROM `text` WHERE content LIKE '%$k[0]%' or content LIKE '%$k[1]%'";  
        $query = mysql_query($sql);  
          
        while($r=mysql_fetch_array($query)) {  
            $r[content] = preg_replace("/($k[0])/i""<font color=red><b>\1</b></font>", $r[content]);  
            $r[content] = preg_replace("/($k[1])/i""<font color=red><b>\1</b></font>", $r[content]);  
            echo "$r[content]"."<br>";  
        }  
    }  
      
?>  
  
<html>  
    <body>  
    <form action="" method="get">  
    关键字:  
    <input type="text" name="key" />  
    <input type="submit" name="sub" value="搜索" />  
    </form>  
    </body>  
</html>  

免责声明:文章转载自《PHP站内搜索:多关键字、加亮显示》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Visual Studio 智能提示功能消失解决办法C#程序执行Python脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP出现502解决方案

nginx 出现 502 有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 php-fpm 处 理有问题,nginx 将正确的客户端请求发给了后端的 php-fpm 进程,但是因为 php-fpm 进程的问 题导致不能正确解析 php 代码,最终返回给了客户端 502 错误。 服务器出现 502 的原因是连接超时我们向服务器发送请求由于服务...

MySQL 8 主从搭建

主:192.168.10.2 从:192.168.10.3 1、修改配置文件 MySQL 搭建主从需要配置 my.cnf ,在主库 my.cnf 的 [mysqld] 段落下添加如下内容: [mysqld] # 设置server-id,唯一值,标识主机,必须与从库不一致 server-id=1 # 开启二进制日志,主库必须开启 log-bin=mysql...

mysql——mysqldump命令导出数据库以及导出表的各种导出情况(参数大全)

导出某个数据库下面所有表的结构: mysqldump -u root -p123 -d see > C:\Users\del\Desktop\db.sql 导出某个数据库下所有表结构及表数据(不加-d): mysqldump -u root -p123 see > C:\Users\del\Desktop\dbsy.sql ---------...

mysql查询更新时的锁表机制分析

为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。 一、概述 MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级...

tidb在DDL语句方面的测试

Mysql与tidb测试数据为8000万行。 1、修改一个字段的列名,比如将“ctime”修改为“cctime”。 Tidb测试:   MySQL测试:   2、同一属性之间切换,即修改一个字段的属性大小。比如将int类型修改为bigint类型 Tidb:   Mysql:   MySQL是创建临时表的方式来加字段,因此这个时间花费已超过40分钟,所以停止...

mysql进制之间的转换

1.十进制转换成二进制 select bin(5); 2.十进制转换成八进制 select oct(5); 3.十进制转换成十六进制 select hex(5); 4.二进制转换成十进制 select conv('101',2,10); 5.十进制转换成十六进制 select conv('20',10,16);...