首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL可以a WHERE = anything吗?

MYSQL可以a WHERE = anything吗?
EN

Stack Overflow用户
提问于 2014-08-24 02:32:23
回答 3查看 297关注 0票数 0

这就是最终对我起作用的方法。这是一个小项目,所以效率不是什么大问题。只是想知道它现在看起来怎么样。

我试着按照建议的方法做,但我并不是真的理解它,因此当我不能让它工作时,我不能麻烦地拍摄它。

这一点我是理解的。

代码语言:javascript
复制
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;
        }
EN

回答 3

Stack Overflow用户

发布于 2014-08-24 02:42:01

一种可能性是基于您拥有的值构建查询。在这段代码中,我根据post值将条件添加到查询中。筛选器值本身被放在一个数组中,用作查询的参数,因为这消除了SQL注入的风险,而不会带来太多麻烦。

结果如下所示:

代码语言:javascript
复制
$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数组中,就可以过滤额外的列。

代码语言:javascript
复制
$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值放入查询要安全一些。

票数 1
EN

Stack Overflow用户

发布于 2014-08-24 02:42:53

在sql中,除了文本字段之外,WHERE条件中没有通配符,对于您的任务,您需要根据条件构建查询

票数 -1
EN

Stack Overflow用户

发布于 2014-08-24 02:47:55

您可以使用LIKE运算符

代码语言:javascript
复制
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';
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25465117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档