欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-03-29 10:08:21
...
  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. }
复制代码