如何在php中实现多个搜索过滤器

Ina*_*nam 0 php mysql search filter

我正在尝试在 php 和 mysql 中实现过滤器来搜索数据库中的记录......过滤器应该像如果在 6 个过滤器中只有两个被选中查询将对这两个执行“AND”操作并从数据库中获取数据,如果三个然后它将对这三个过滤器执行“AND”操作......实现的一种方法是检查每个过滤器。

if(isset($_GET['name'] && isset($_GET['city'])) { perform AND for these two};
elseif(isset($_GET['name'] && (isset($_GET['age'])) {perform AND for these three}.
and so on ...
Run Code Online (Sandbox Code Playgroud)

但问题是,如果我有 6 个过滤器,那么我必须为它创建 64 个组合......我在想是否有任何替代解决方案存在?

tsh*_*kus 5

这可以工作,假设您的$_GET键匹配表中的列:

$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
Run Code Online (Sandbox Code Playgroud)

$query = "SELECT * FROM table WHERE name = 'name' AND city = 'city' AND age = 'age';"

我认为这可能有效,尽管此代码示例不包括针对 SQL 注入的清理,因此您可能应该添加一些内容来清除潜在危险的输入

更新:添加$filtered_get = array_filter($_GET);以过滤掉$_GET数组中的任何空字段