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

來源:互聯網
上載者:User
  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. }

複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.