在最小值和最大值之间mysqli

时间:2014-10-09 15:16:06

标签: php mysql sql mysqli

我必须创建一个包含两个文本字段的PHP网页,用户可以在其中输入SQL数据库的最小和最大商品价格。所以我有价格的物品。例如,如果用户想要查看价格4和15之间的项目,他可以提交它,然后它将仅显示该价格范围内的项目。我怎样才能做到这一点?如何回应这个?

谢谢!

到目前为止,我有这个:

$min=$_POST["minimum"];

$max=&$_POST["maximum"];

$result = mysqli_query($con,"SELECT * FROM items WHERE selling price BETWEEN {$min}+1 AND {$max}");

3 个答案:

答案 0 :(得分:1)

除了一个主要的SQL注入问题,你的脚本看起来很好。只是一些小型和语法错误。将此与您的比较:

$min=(int)$_POST["minimum"];
$max=(int)$_POST["maximum"];

$result = mysqli_query($con,"SELECT * FROM items WHERE selling_price BETWEEN {$min}+1 AND {$max}");

那么,我改变了什么?

  • 至少将发布的值强制转换为int,以消除任何人将恶意SQL代码注入查询的可能性。你应该在将来使用适当的转义
  • 您不需要在第二行之前添加&字符。您不需要通过引用分配值。只是分配普通的旧方法
  • 列和表名不能在MySQL中占用空格。您确定该列的名称是否正确?也许有一个下划线?

答案 1 :(得分:0)

其中一种更安全,更简单的做法是

$dsn = "mysql:dbname=test;host=127.0.0.1";
$dbh = new PDO($dsn, 'username', 'password');


if(isset($_POST["minimum"]) && isset($_POST["maximum"]))
{
 $min=floatval($_POST["minimum"]);    //+1 is not needed
 $max=floatval($_POST["maximum"]);

 $sth = $dbh->prepare("SELECT * FROM items WHERE selling_price BETWEEN ? AND ?");
 $sth->execute(array($min,$max));
 while($row = $sth->fetch(PDO::FETCH_OBJ))
 {
    print_r($row);
 }
}

答案 2 :(得分:-1)

这应该为你做的伎俩:

 if(isset($_POST['minimum'])){

        $min = $_POST['minimum'];
    }else{
        $min = '';
    }

    if(isset($_POST['maximum'])){

        $max = $_POST['maximum'];
    }else{
        $max = '';
    }

    $sql = "SELECT * FROM item WHERE selling_brice > '$min' AND  selling_price < '$max'";
    $query = mysqli_query($con, $sql);
    $count = mysqli_num_rows($query);

    if($query == true && $count > 0 ){

        while ($row = mysqli_fetch_assoc($query)){

            $price .= $row['selling_price'];

            $price .= '<br />'

        }

        echo $price;

    }else{
  echo "NO results to Display";
}

当然这不是最好的编程mysql注入,你的查询使用*等....但这应该有效。