我正在根据发布的值进行查询,例如。以下是查询
$query= mysqli_query($connect,
"SELECT * FROM residential WHERE type='$type' AND unit_type='$unit_type' "
. "AND price BETWEEN '$min_price' AND '$max_price' "
. " AND bedrooms BETWEEN '$min_bedrooms' AND '$max_bedrooms'");
现在$unit_type , $min_price etc are coming from $_POST array
,我的问题是如果我在查询中没有收到任何使用过的值($type ,$max_bedrooms, $min_bedrooms etc )
,那么查询就不起作用了。我的问题是我如何仅根据发布的值更新查询。
答案 0 :(得分:3)
使用$ query变量并按帖子值更改
$query= "SELECT * FROM residential WHERE 1=1 ";
if($type!=""){
$query.=" AND type='$type'";
}
if($unit_type!=""){
$query.=" AND unit_type='$unit_type'";
}
if(($min_price!="") && ($max_price!="")){
$query.=" AND price BETWEEN '$min_price' AND '$max_price' ";
}
if(($min_bedrooms!="") && ($max_bedrooms!="")){
$query.=" AND bedrooms BETWEEN '$min_bedrooms' AND '$max_bedrooms'";
}
$result= mysqli_query($connect,$query);
答案 1 :(得分:2)
你可以(应该)在将变量放入查询之前执行一些验证。在那里,您可以检查是否发送了变量(以及有效类型等),如果不是,则可以使用默认值替换它们。
还有另一种方法可以执行此操作,在您的查询中,您可以使用COALESCE()函数,如果您的值不存在,则指定默认值,例如:COALESCE('$ unit_type','coin')。
如评论中所述,您应该了解SQL注入。您可以通过严格验证和编码已发送变量或使用一些预准备语句来编写SQL查询(dibi,pdo ..)来避免它。
希望有所帮助:)