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 相关文章推荐
PHP出错界面
Oct 09 PHP
截获网站title标签之家内容的例子
Oct 09 PHP
PHP安全配置
Dec 06 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php PDO中文乱码解决办法
Jul 20 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
php用户登录之cookie信息安全分析
May 13 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
python元组操作实例解析
2014/09/23 Python
python修改操作系统时间的方法
2015/05/18 Python
windows下ipython的安装与使用详解
2016/10/20 Python
回调函数的意义以及python实现实例
2017/06/20 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014年残联工作总结
2014/11/21 职场文书