首頁  >  文章  >  後端開發  >  PHP多關鍵字、多字段產生SQL語句的函數

PHP多關鍵字、多字段產生SQL語句的函數

WBOY
WBOY原創
2016-07-25 08:55:541299瀏覽
  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