簡體   English   中英

MySql使用PHP基於多個變量字段進行搜索

[英]MySql search using PHP based on multiple variable fields


我試圖在MySql數據庫中搜索基於用戶輸入的東西,如下所示。
用戶可以/不從以下字段中選擇

<select name="field_one" id="f1">
<option value="AA">AA</option> 
<option value="BB">BB</option>
<option value="CC">CC</option>
</select>


<select name="field_two" id="f2">
<option value="11">11</option> 
<option value="22">22</option>
<option value="33">33</option>
</select>

如果User僅選擇'field_one',則mysql_query應僅基於'field_one'進行過濾。 在這種情況下,可以有四種組合

  1. 選擇Filed_one並且未選擇filed_two
  2. 未選擇Field_One並選擇field_two
  3. 未選擇Filed_one,未選擇Filed_two
  4. 選擇Field_one並選擇Field_Two

進行此搜索的最佳和最有效的方法是什么?

我嘗試過' case .... break; '和' if ',但是當滿足第一個條件時,代碼停止並且不檢查下一個條件
任何人都能給我一個線索嗎?
先謝謝您的幫助....

嘗試這個:-

$query = "select * from table_name where 1 ";
            if(!empty($_POST['field1']) ) {
             $query .= " AND field1 like '".trim($_POST['field1'])."'";
            }
            if(!empty($_POST['field2'])) {
             $query .= " AND field2 like '".trim($_POST['field2'])."'";
            }
            // and so on
            $result = mysql_query($query);

請使用轉義字符串http://php.net/mysql_real_escape_string

            <?php
            $sql = "SELECT * FROM table_name WHERE 1";

            if(isset($_POST)){
                if(isset($_POST['field_one'])){
                    $sql.= 'AND  field_one'= $_POST['field_one'];
                }
                if(isset($_POST['field_two'])){
                    $sql.= 'AND field_two'= $_POST['field_two'];
                }
            }

            mysql_query($sql);
            ?>

示例,未經過測試,需要大量針對SQL注入的變量處理

$where = "";
$bits = array();
$bitset=false;

if(isset($_POST['field_one') && strlen($_POST['field_one')) > 0)
  {
  $bitset = true;
  $bits[] = " field1 = $_POST['field_one')"
  }

if(isset($_POST['field_two') && strlen($_POST['field_two')) > 0)
  {
  $bitset = true;
  $bits[] = " field2 = $_POST['field_two')"
  }

if($bitset)
  {
  $where = implode(", " $bits);
  }

$sql = "select * from table " . $where;

您還可以使用PDO和param綁定來避免SQL注入: http//www.php.net/manual/fr/pdostatement.bindparam.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM