PDO选择一个id或全部

时间:2012-12-16 22:23:16

标签: php sql pdo

我正在尝试使用php和pdo构建一个分类器,在那里我可以为用户显示任务。 我有几个选择,我可以从中选择一个或全部。

<select id="select_user">
    <option data-id="all">All</option>
    <option data-id="1">User 1</option>
    <option data-id="2">User 2</option>
    <option data-id="3">User 3</option>
    <option data-id="4">User 4</option>
</select>

根据任务是否完成显示任务。

<select id="task_done">
    <option data-id="all">All</option>
    <option data-id="1">Done</option>
    <option data-id="0">Not Done</option>
</select>

根据截止日期是否已过去显示任务。

<select id="task_deadline">
    <option data-id="all">All</option>
    <option data-id="1">Passed</option>
    <option data-id="0">Not passed</option>
</select>

通过一些Ajax我调用php函数看起来像这样:

function getTasksSorter($userid, $done, $passed) {
    $stmt = $this->conn->prepare('SELECT * FROM tasks WHERE user_id = :userid AND done = :done AND deadline_date = :passed');
    $stmt->execute(array('userid' => $userid,'done' => $done, 'passed' => $passed));
    $row = $stmt->fetchAll();

       foreach.. $row... build $html;

    }
    return $html;
}

如果我选择All,显然这不起作用。我试图解决这个问题,但我无法弄明白。如何修改代码以使所有选择都有效?

编辑:好的,我添加了很多信息,因为当我第一次询问时我还不够清楚。我不想用一堆if语句来解决这个问题,必须有一个更好的解决方案。

1 个答案:

答案 0 :(得分:3)

那么你的逻辑可能取决于为这样的$userid提供一个值。

function getTasksSorter($userid = null) {
    if(is_null($userid)){
        $stmt = $this->conn->query('SELECT * FROM tasks');
    } else {
        $stmt = $this->conn->prepare('SELECT * FROM tasks WHERE user_id = :userid');
        $stmt->execute(array('userid' => $userid));
    }

    $row = $stmt->fetchAll();

       foreach.. $row... build $html;

    }
    return $html;
}