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 个组合......我在想是否有任何替代解决方案存在?
这可以工作,假设您的$_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数组中的任何空字段