MySql使用PHP基于多个变量字段进行搜索

时间:2013-12-27 12:33:56

标签: php mysql logic


我正在尝试根据用户输入在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
  5. 进行此搜索的最佳和最有效的方法是什么?

    我尝试使用“case .... break;”和“if”,但是当满足第一个条件时,代码会停止,并且不会检查下一个条件
    任何人都能给我一个线索吗?
    提前感谢您的帮助......

4 个答案:

答案 0 :(得分:1)

试试这个: -

$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

答案 1 :(得分:1)

            <?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);
            ?>

答案 2 :(得分:0)

示例,未经过测试,需要大量针对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;

答案 3 :(得分:0)

你也可以使用PDO&amp; param绑定以避免SQL注入:http://www.php.net/manual/fr/pdostatement.bindparam.php