无法正确过滤数据库结果

时间:2019-01-05 14:06:53

标签: php mysql oop model-view-controller

因此,我正在建立一个管理用户的系统,在永久删除记录之前,我实施了“回收站”作为健全性检查。

为此,我在表中添加了名为deleted的布尔值(tinyint)。

这是我用来获取记录的方法:

static public function select_all($deleted = null) {
    $query = "SELECT * FROM ".static::$db_table;
    if ($deleted) {
        $query .= " WHERE deleted = ".$deleted;
    }
    return static::sql_query($query);
}

$db_table是在类中定义的,而sql_query($query)是实际执行查询的方法,因为在每个类和每个查询中都使用它们,所以没有什么错。

这就是我所说的方法:

未删除:

$users = User::select_all(false);
  • 预期输出:所有将deleted设置为0的记录
  • 实际输出:每条记录

已删除:

$users = User::select_all(true);
  • 预期输出:所有将deleted设置为1的记录
  • 实际输出:所有将deleted设置为1的记录

这是我显示结果的方式:

<?php foreach ($users as $user) { ?>
    <?php if ($user->id != $_SESSION['user_id']) { ?>
        <tr>
            <td><?= h($user->name()); ?></td>
            <td><?= h($user->email); ?></td>
            <td><?= h($user->username); ?></td>
            <td><?= h($user->status()); ?></td>
            <td>
                <a href="<?= url('users/details.php?id='.h(u($user->id))); ?>">Details</a>
            </td>
        </tr>
    <?php } ?>
<?php } ?>

h()htmlspecialchars()的快捷方式,而()urlencode()的快捷方式。

因此,基本上,它能够找到所有已删除的用户,但不能找到所有未删除的用户。 有人可以帮我吗?我将提供任何必要的其他信息。

1 个答案:

答案 0 :(得分:1)

您的if语句阻止您将条件添加到SQL。试试if / else代替:

static public function select_all($deleted = null) {
    $query = "SELECT * FROM ".static::$db_table;
    if (null !== $deleted) {
        if ($deleted) {
            $query .= " WHERE deleted = 1";
        } else {
            $query .= " WHERE deleted = 0";
        }
    }
    return static::sql_query($query);
}

更新 如果希望它与不带删除标志的表一起使用,则可以添加对null的检查。查看更新的代码...