首页  >  文章  >  后端开发  >  PHP多关键字、多字段生成SQL语句的函数

PHP多关键字、多字段生成SQL语句的函数

WBOY
WBOY原创
2016-07-25 08:55:541292浏览
  1. $keyword="1 2 3";
  2. echo $sql=search($keyword,"enter_gongyin_pic","a+b+c"); //函数生成,没有LIMIT,没有ORDER BY
复制代码

生成sql语句:

  1. 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获得,按空格分开,可以多字段去查找.

多关键字、多字段生成sql查询语句的函数:

  1. /**

  2. * 查询条件构造语句
  3. * edit: bbs.it-home.org
  4. */
  5. function search($keyword,$table,$field)
  6. {
  7. /**
  8. //形参说明:
  9. //keyword为关键字,如“北京首都 方向 火车”。带有空格或者不带
  10. //table为表名,如enter_gongyin_pic。
  11. //field为字段组合,如查找一个字段就写好 name
  12. //如查找两个以上就用 name+picdir
  13. */
  14. //首先确定field
  15. $new_field=explode("+",$field); //按+剥离
  16. $field_count=count($new_field); //得到的结果数量
  17. $newstring=explode(" ",$keyword); //按空格剥离
  18. $newstring2=array();
  19. //把字符串去掉没有用的空格叔祖元素
  20. $i=0;
  21. foreach ($newstring as $key => $value) {
  22. if($value!="")
  23. {
  24. $newstring2[$i]=$value;
  25. $i++;
  26. }
  27. }
  28. //把字符串去掉没有用的空格叔祖元素,
  29. $result_count=count($newstring2); //得到的结果数量
  30. //生成SQL语句
  31. //* if($field_count==1) //找1个字段 START **
  32. if($field_count==1) //找1个字段
  33. {
  34. if($result_count==1) //判断如果是一个关键段
  35. {
  36. $newstring_search=$newstring2[0];
  37. $sql="SELECT *
  38. FROM `$table`
  39. WHERE `".$new_field[0]."` LIKE '%$newstring_search%'";
  40. }
  41. if($result_count>1) //判断如果是多个关键段
  42. {
  43. $sql="SELECT *
  44. FROM `$table`
  45. WHERE ";
  46. $sql_add="";
  47. foreach ($newstring2 as $key => $value)
  48. {
  49. if($key==0)
  50. {
  51. $sql_add=$sql_add."`".$new_field[0]."` LIKE '%".$value."%'";
  52. }
  53. else
  54. {
  55. $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value."%'";
  56. }
  57. }
  58. $sql=$sql.$sql_add;

  59. }
  60. }
  61. //***** if($field_count==1) //找1个字段 END ******

  62. //**** if($field_count>1) //找多个字段 START *****
  63. if($field_count>1) //找多个字段,这个时候$new_field是一个数组。拥有多个字段
  64. {
  65. if($result_count==1) //判断如果是一个关键段
  66. {
  67. $newstring_search=$newstring2[0]; //$newstring_search是关键字
  68. $sql="SELECT *
  69. FROM `$table`
  70. WHERE ";
  71. $sql_add="";//新增加字段
  72. foreach ($new_field as $key => $value)
  73. {
  74. if($key==0)
  75. {
  76. $sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."%'";
  77. }
  78. else
  79. {
  80. $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'";
  81. }
  82. }
  83. $sql=$sql.$sql_add;
  84. }
  85. if($result_count>1) //判断如果是多个关键段(多个关键字)===
  86. {
  87. $sql="SELECT *
  88. FROM `$table`
  89. WHERE ";
  90. $sql_add="";//新增加字段
  91. foreach ($new_field as $key => $value)
  92. {
  93. if($key==0) //遇到$new_field[0]时候 例:`a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%'
  94. { //嵌套foreach
  95. foreach ($newstring2 as $key2 => $value2)
  96. {
  97. if($key2==0)
  98. {
  99. $sql_add=$sql_add."`".$value."` LIKE '%".$value2."%'";
  100. }
  101. else
  102. {
  103. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";
  104. }
  105. }
  106. //嵌套foreach
  107. }
  108. else
  109. //(如果是多字段的比如查name+picdir表)开始FOREACH连续循环,每次执行ELSE $new_field[1] $new_field[2] $new_field[3]。
  110. //对应的值为$value
  111. {
  112. //嵌套foreach(多字段与多关键字)
  113. foreach ($newstring2 as $key2 => $value2)
  114. {
  115. if($key2==0)
  116. {
  117. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";
  118. }
  119. else
  120. {
  121. $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'";
  122. }
  123. }
  124. //嵌套foreach
  125. }
  126. }//foreach ($new_field as $key => $value)结束
  127. $sql=$sql.$sql_add;
  128. }//if($result_count>1)结束
  129. }//if($field_count>1) 结束
  130. //*** if($field_count>1) //找多个字段 END ***
  131. return $sql;
  132. }
复制代码


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn