首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用用户输入的SQL过滤器(如果提供

使用用户输入的SQL过滤器(如果提供
EN

Stack Overflow用户
提问于 2018-06-08 23:00:27
回答 1查看 277关注 0票数 -1

我有一个SQL查询:

代码语言:javascript
复制
$q='SELECT i.RID, i.ITEM, i.ITEMNAME, i.Desc,
GROUP_CONCAT(concat(m.META_NAME, ": ", m.META_VALUE)) AS Meta, l.Building, l.PERSON_TYPE 
FROM LAF_Lost_Items AS i INNER JOIN LAF_Lost_Items_Metadata AS m ON i.RID=m.RID AND i.ITEM=m.ITEM 
INNER JOIN LAF_Lost_Inquiries AS l ON l.RID=i.RID 
WHERE (i.ClaimID IS NULL) AND (l.Building=?) AND (dateLost > ?) AND (META_NAME IN (?) OR META_VALUE IN (?)) 
GROUP BY i.RID, i.ITEM;';
$DB->query($q, array($_POST["Building"], $_POST["dateLost"], $_POST["META_NAME"], $_POST["META_VALUE"]));
$r=$DB->fetch_assoc_all();

此查询有效,但如果用户未提供任何内容,则使用空值,这会给出错误的结果。

如何编写只使用用户提供的值过滤结果的SQL查询?当用户单击submit按钮时,会发生一个ajax调用并绘制一个新表。

这两个答案sql filter table dataSQL Filter Query很接近我需要的,但我不确定如何使它们适合我的情况。

附注:添加了断点以提高可读性

编辑1:新增截图。Building和Meta名称始终存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 03:00:04

正如@Lucarnosky和@Gus所建议的,我最终检查了$_POST变量是否不为空,然后将它们添加到字符串中。下面是代码当前的样子:

代码语言:javascript
复制
$s = "";
foreach ($_POST as $i => $values) {
    if (!is_array($values)) {
        if (!empty($values)){
            echo $i . ": " . $values . "\n";
            $s .= " AND " . $i . "=" . $values . " ";
        }
    }
    else {
        foreach ($values as $key => $value) {
            if (!empty($value)) {
                echo $i . ": " . $key . ": " . $value . "\n";
                $s .= " AND " . $key . "=" . $value . " ";
            }
        }
    }
}

$q='SELECT i.RID, i.ITEM, i.ITEMNAME, i.Desc, 
GROUP_CONCAT(concat(m.META_NAME, ": ", m.META_VALUE)) AS Meta, l.Building, l.PERSON_TYPE 
FROM LAF_Lost_Items AS i INNER JOIN LAF_Lost_Items_Metadata AS m ON i.RID=m.RID AND i.ITEM=m.ITEM 
INNER JOIN LAF_Lost_Inquiries AS l ON l.RID=i.RID 
WHERE ' . $s . ' GROUP BY i.RID, i.ITEM;';

如果你有更好的答案,请让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50763415

复制
相关文章

相似问题

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