将redondant PHP代码粘贴到多个函数中

时间:2017-01-18 13:28:16

标签: php sql filter

我已经有了这些PHP过滤器(将AND粘贴到SQL选择中):

if($data->secteur){
    $requete .= " AND etude.Secteur     = '".$data->secteur."'";
}
if($data->region){
    $requete .= " AND etude.region      = '".$data->region."'";
}
if($data->ca_min){
    $requete .= " AND etude.ca          >= ".$data->ca_min."";
}
if($data->ca_max){
    $requete .= " AND etude.ca          <= ".$data->ca_max."";
}
if($data->revenus_min){
    $requete .= " AND Zone.Revenue_Zone >=".$data->revenus_min."";
}
if($data->revenus_max){
    $requete .= " AND Zone.Revenue_Zone <=".$data->revenus_max."";
}

我在几个不同的功能中需要它们,它们总是严格相同但需要输入....有没有办法简单地粘贴一个&#34;关键字&#34;每次我需要它添加到任何功能?我不知道如何以一种非常简单的方式做到这一点。 现在,我被迫在我的每个功能中重写它们!最后它真的很难看!

我无法将它们包含在变量中,因为需要对其进行解释。我javascript我会做一个像eval这样的函数(&#34; varFilters&#34;);

编辑:

我试试这个:

function filtres(){

    $filtres = "
        if($data->secteur){
        $requete .= " AND etude.Secteur     = '".$data->secteur."'";
    }
    if($data->region){
        $requete .= " AND etude.region      = '".$data->region."'";
    }
    if($data->ca_min){
        $requete .= " AND etude.ca          >= ".$data->ca_min."";
    }
    if($data->ca_max){
        $requete .= " AND etude.ca          <= ".$data->ca_max."";
    }
    if($data->revenus_min){
        $requete .= " AND Zone.Revenue_Zone >=".$data->revenus_min."";
    }
    if($data->revenus_max){
        $requete .= " AND Zone.Revenue_Zone <=".$data->revenus_max."";
    }


    ";

    return $filtres

}

我需要把所有东西都放在一条线上,这不是真的很好看

我打算在我的其他功能中注入$ filtres并使用eval($ filtres),这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

不确定,如果我弄错了,但看起来,你只需要创建一个函数,它将$data作为参数并从中构建你的查询字符串。

function filter($data) {
    $requete = '';
    if($data->secteur){
        $requete .= " AND etude.Secteur     = '".$data->secteur."'";
    }
    if($data->region){
        $requete .= " AND etude.region      = '".$data->region."'";
    }
    if($data->ca_min){
        $requete .= " AND etude.ca          >= ".$data->ca_min."";
    }
    if($data->ca_max){
        $requete .= " AND etude.ca          <= ".$data->ca_max."";
    }
    if($data->revenus_min){
        $requete .= " AND Zone.Revenue_Zone >=".$data->revenus_min."";
    }
    if($data->revenus_max){
        $requete .= " AND Zone.Revenue_Zone <=".$data->revenus_max."";
    }
    return $requete;
}

稍后再使用它,只需使用$ data var

调用它
$requete .= filter($data);