Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于多变量字段的PHP MySql搜索_Php_Mysql_Logic - Fatal编程技术网

基于多变量字段的PHP MySql搜索

基于多变量字段的PHP MySql搜索,php,mysql,logic,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> AA BB 科科斯群岛 &


我正在尝试根据用户输入在MySql数据库中搜索,如下所示。
用户可以/不可以从以下字段中选择

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

AA
BB
科科斯群岛

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

11
22
33
如果用户只选择“field\u one”,那么mysql\u查询应该只基于“field\u one”进行过滤。在这种情况下,可以有四种组合

  • 已选择文件1,但未选择文件2
  • 字段_1未选择,字段_2已选择
  • 未选择归档文件1和归档文件2
  • 选择字段\ 1,选择字段\ 2
  • 进行此搜索的最佳有效方法是什么

    我试过使用“
    case…”。。。。中断
    ,则代码>”和“
    ”,但当满足第一个条件时,代码停止并不检查下一个条件

    有人能给我一个线索吗
    提前感谢您的帮助….

    示例,未经测试,需要针对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;
    
    试试这个:-

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

    请同时使用转义字符串

    您还可以使用PDO和param绑定来避免SQL注入:


    我已经跳过了,其他人也可能会跳过。此外,您的代码至少有7个语法错误,将生成无效查询。
                <?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);
                ?>