这就是最终对我起作用的方法。这是一个小项目,所以效率不是什么大问题。只是想知道它现在看起来怎么样。
我试着按照建议的方法做,但我并不是真的理解它,因此当我不能让它工作时,我不能麻烦地拍摄它。
这一点我是理解的。
if(!empty($_POST))
{
$project = $_POST['project'];
if ($project == "All") {
$project = '';
}
$category = $_POST['category'];
if ($category == "All") {
$category = '';
}
$services = $_POST['services'];
if ($services == "All") {
$services = '';
}
$priority = $_POST['priority'];
if ($priority == "All") {
$priority = '';
}
$query = $db->prepare
("SELECT * FROM event
WHERE Project LIKE '%$project%' AND
EventCategory LIKE '%$category%' AND
EventServices LIKE '%$services%' AND
EventPriority LIKE '%$priority%';");
$query->execute();
$result = $query;
$db= NULL;
}发布于 2014-08-24 02:42:01
一种可能性是基于您拥有的值构建查询。在这段代码中,我根据post值将条件添加到查询中。筛选器值本身被放在一个数组中,用作查询的参数,因为这消除了SQL注入的风险,而不会带来太多麻烦。
结果如下所示:
$extraConditions = '';
$params = array();
if ($project !== 'ALL') {
$extraConditions .= ' AND project = :project';
$params[':project'] = $project;
}
if ($priority !== 'ALL') {
$extraConditions .= ' AND priority = :priority';
$params[':priority'] = $priority;
}
if ($category !== 'ALL') {
$extraConditions .= ' AND category = :category';
$params[':category'] = $category;
}
$query = $db->prepare
("SELECT * FROM event WHERE 1 = 1 $extraConditions");
$query->execute($params); // <- This is where you pass the filter values.添加1=1是因为懒惰。每个额外的条件前面都有AND。如果查询中没有WHERE 1=1,它将是无效的,您必须将第一个和更改为WHERE。我觉得这样更干净。
您可以对其稍作更改,以定义过滤器列表。如果它们与列名匹配,那么您可以创建一个简单的循环,并且只需将它们添加到filters数组中,就可以过滤额外的列。
$extraConditions = '';
$params = array();
$filters = array('project', 'category', 'priority');
foreach ($filters as $filter)
{
if (array_key_exists($filter, $_POST)
{
$value = $_POST[$filter];
$extraConditions .= " AND $filter = :$filter";
$params[":$filter"] = $value;
}
}
$query = $db->prepare
("SELECT * FROM event WHERE 1 = 1 $extraConditions");
$query->execute($params);这两种解决方案都使用查询参数,因此这比直接将post值放入查询要安全一些。
发布于 2014-08-24 02:42:53
在sql中,除了文本字段之外,WHERE条件中没有通配符,对于您的任务,您需要根据条件构建查询
发布于 2014-08-24 02:47:55
您可以使用LIKE运算符
SELECT * FROM event
WHERE Project = '$project' AND --where your project variable can have the value '%' instead of All
EventCategory = '$category' AND
EventServices = '$services' AND
EventPriority = '$priority';https://stackoverflow.com/questions/25465117
复制相似问题