php - 从多个 $_GET 构建 WHERE 子句

标签 php mysql sql where-clause

我目前正在尝试编写从 $_GET 变量(它们本身来自选择下拉列表)生成的复杂 MySQL WHERE 子句。首先,一些代码让您知道我在说什么:

    if(!isset($_GET['order'])){
        $order= 'start asc';
    } elseif ($_GET['order'] == "dateasc") {
        $order= 'start asc';
    } elseif ($_GET['order'] == "titleasc") {
        $order= 'title asc';
    } elseif ($_GET['order'] == "titledesc") {
        $order= 'title desc';
    };


    if(!isset($_GET['cat'])){
        $cat= '0';
    } else  {
        $cat = $_GET['cat'];
    };


    if(!isset($_GET['loc'])){
        $loc= '0';
    } else  {
        $loc = $_GET['loc'];
    };


    if (isset($_GET['sd']) || isset($_GET['ed']) || isset($_GET['cat']) || isset($_GET['loc']) || isset($_GET['order']) ) {
        $where = 'WHERE ';

        if (isset($_GET['sd'])) {
            $where .= "start = " . $_GET['sd'];
        };

        if (isset($_GET['ed'])) {
            $where .= "AND end = " . $_GET['ed'];
        };

        if (isset($_GET['cat'])) {
            $where .= "AND category = " . $_GET['cat'];
        };

        if (isset($_GET['loc'])) {
            $where .= "AND location = " . $_GET['loc'];
        };
    };


    $result = mysql_query("SELECT * FROM " . TABLE . $where . " ORDER BY " . $order);

显然这是行不通的,否则我不会在这里。 :) 基本上,我有 4 个变量,我想有条件地用于在我的查询中进行排序:开始日期、结束日期、类别和位置。我的问题是所有这 4 个可能并不总是被使用..所以在上面的例子中,可能有人选择了一个类别($cat)而不是开始日期($sd)......这意味着我的WHERE 子句将以“AND”开头,这显然是无效的。那么,如何根据可能使用或不使用的变量构建查询?

我真的觉得我想太多了,我害怕编写 9000 行 isset 测试来解释 $_GET 变量用法的每个组合。当然有一种简单的方法可以从多个 $_GET 构建 WHERE 子句,每次都可能会或可能不会使用..?我试过谷歌搜索,但只能找到建议使用框架构建复杂查询的解决方案,而且对于这样一个简单的问题,这似乎过于……笨拙……。

最佳答案

如果您只是担心有一个以 AND 开头的 where 子句,您可以添加 1=1 来说明没有过滤器。

WHERE 1=1

然后,如果你有任何过滤器,它将看起来像这样:

WHERE 1=1 AND col1=? AND col2=?

关于php - 从多个 $_GET 构建 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770939/

相关文章:

java - 我们如何计算 mongodb java 中不同文档的 arraylist 中的项目数?

php - 从 2 个带条件的表进行 SQL 查询

php - 正则表达式 Lookarounds,防止前方和后方

sql - 如何计算具有不同约束的同一张表的百分比

php - 具有联接的多维数组结果

php - Dovecot SHA512-Crypt 和 PHP

mysql - SQL make 2 更新查询 1

mysql - 确定 n 维中点之间的距离

php - 在 SQL 查询或 PHP 中进行计算?

php - 动态拖放表格行