PHP+Mysql实现多关键字与多字段生成SQL语句的函数


Posted in PHP onNovember 05, 2014

本文实例讲述了PHP+Mysql实现多关键字与多字段生成SQL语句的函数的方法。分享给大家供大家参考。具体实现方法如下:

先看实例:

$keyword="1 2 3";

echo $sql=search($keyword,"enter_gongyin_pic","a+b+c"); //函数生成,没有LIMIT,没有ORDER BY

生成:
SELECT * FROM `enter_gongyin_pic` WHERE `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%' OR `b` LIKE '%1%' OR `b` LIKE '%2%' OR `b` LIKE '%3%' OR `c` LIKE '%1%' OR `c` LIKE '%2%' OR `c` LIKE '%3%'

$keyword由POST或者GET获得.按空格分开 可以多字段去查找.

实现函数如下:

function search($keyword,$table,$field)  

{  

//========================================================  

  

//形参说明:  

//keyword为关键字,如“北京首都 方向 火车”。带有空格或者不带  

//table为表名,如enter_gongyin_pic。  

//field为字段组合,如查找一个字段就写好 name   

//如查找两个以上就用 name+picdir  

//========================================================  

//首先确定field  

$new_field=explode("+",$field); //按+剥离  

$field_count=count($new_field); //得到的结果数量  

  

  

$newstring=explode(" ",$keyword); //按空格剥离  

$newstring2=array();  

   //把字符串去掉没有用的空格叔祖元素  

   $i=0;  

   foreach ($newstring as $key => $value) {  

   if($value!="")  

   {  

   $newstring2[$i]=$value;  

   $i++;  

   }  

   }  

//把字符串去掉没有用的空格叔祖元素,  

          

$result_count=count($newstring2); //得到的结果数量  

  

//下面生成SQL语句  

  

  

//********************** if($field_count==1) //找1个字段 START ****************************  

if($field_count==1) //找1个字段  

{  

if($result_count==1) //判断如果是一个关键段  

   {  

   $newstring_search=$newstring2[0];  

$sql="SELECT *   

FROM `$table`   

WHERE `".$new_field[0]."` LIKE '%$newstring_search%'";  

   }  

       

   if($result_count>1) //判断如果是多个关键段  

   {  

  

$sql="SELECT *   

FROM `$table`   

WHERE ";  

$sql_add="";  

foreach ($newstring2 as $key => $value)  

{  

  if($key==0)  

   {  

   $sql_add=$sql_add."`".$new_field[0]."` LIKE '%".$value."%'";  

   }  

   else  

   {  

   $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value."%'";  

      

        }  

          

          }  

    

$sql=$sql.$sql_add;  

}  

  

}  

  

//********************** if($field_count==1) //找1个字段 END ****************************  

  

  

//********************** if($field_count>1) //找多个字段 START ****************************  

if($field_count>1) //找多个字段,这个时候$new_field是一个数组。拥有多个字段  

{  

if($result_count==1) //判断如果是一个关键段  

{  

        $newstring_search=$newstring2[0]; //$newstring_search是关键字  

        $sql="SELECT *   

        FROM `$table`   

        WHERE ";  

        $sql_add="";//新增加字段  

        foreach ($new_field as $key => $value)  

        {  

                        if($key==0)  

                        {  

                        $sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."%'";  

                        }  

                        else  

                        {  

                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'";  

                        }  

        }  

        $sql=$sql.$sql_add;  

}  

if($result_count>1) //判断如果是多个关键段(多个关键字)==========================  

{  

$sql="SELECT *   

FROM `$table`   

WHERE ";  

$sql_add="";//新增加字段  

foreach ($new_field as $key => $value)  

{  

  if($key==0) //遇到$new_field[0]时候 例:`a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%'  

   { //嵌套foreach  

     foreach ($newstring2 as $key2 => $value2)  

      {  

                  if($key2==0)  

                   {  

                        $sql_add=$sql_add."`".$value."` LIKE '%".$value2."%'";  

                   }  

                   else  

                   {  

                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

        }  

    //嵌套foreach  

   }  

   else   

   //(如果是多字段的比如查name+picdir表)开始FOREACH连续循环,每次执行ELSE $new_field[1] $new_field[2] $new_field[3]。  

   //对应的值为$value  

  {  

   //嵌套foreach(多字段与多关键字)  

   foreach ($newstring2 as $key2 => $value2)  

      {  

                  if($key2==0)  

                   {  

                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

                   else  

                   {  

                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";  

                   }  

           }  

   //嵌套foreach  

   }  

          

}//foreach ($new_field as $key => $value)结束  

$sql=$sql.$sql_add;  

}//if($result_count>1)结束  

}//if($field_count>1) 结束  

//********************** if($field_count>1) //找多个字段 END ****************************  

return $sql;  

}

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
默默简单的写了一个模板引擎
Jan 02 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
php防止SQL注入详解及防范
Nov 12 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php计算税后工资的方法
Jul 28 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
简单谈谈PHP中的trait
Feb 25 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php面向对象重点知识分享
Sep 27 PHP
php实现JWT验证的实例教程
Nov 26 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 #PHP
phpnow php探针环境检测代码
Nov 04 #PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 #PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 #PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 #PHP
PHP自动重命名文件实现方法
Nov 04 #PHP
php以post形式发送xml的方法
Nov 04 #PHP
You might like
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python实现Kmeans聚类算法
2020/06/10 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python修改字典键(key)的方法
2019/08/05 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Django实现网页分页功能
2019/10/31 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
恶意软件的定义
2014/11/12 面试题
酒店销售经理岗位职责
2014/01/31 职场文书
给校长的一封建议书
2014/03/12 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
党的群众路线学习材料
2014/05/16 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
杨善洲电影观后感
2015/06/04 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python