我正在根据例如的已发布值进行查询。以下是查询
$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 )
,那么查询就不起作用。我的问题是如何仅根据发布的值更新查询。
使用$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);
在将变量放入查询之前,您可以(应该)执行一些验证。在那里,您可以检查是否发送了变量(以及有效类型等),如果没有,您可以用默认值替换它们。
还有另一种方法可以做到这一点,在您的查询中,您可以使用COALESCE()函数,如果您的值不存在,您可以在其中指定默认值。例如:COALENCE('$unit_type','coin')。
正如在评论中提到的,您应该了解SQL注入。您可以通过严格验证&对发送的变量进行编码,或者使用一些准备好的语句来编写sql查询(dibi,pdo..)。
希望有帮助:)