无法正确筛选数据库结果

nwwlzxa7  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(301)

因此,我制作了一个管理用户的系统,并在永久删除记录之前实现了一个“回收站”作为健全性检查。
我通过添加一个名为 deleted 到我的table上去。
这是我获取记录的方法:

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 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 } ?>

``` h() 是一条捷径 htmlspecialchars()() 是一条捷径 urlencode() .
所以基本上,它可以找到所有删除的用户,但不是所有未删除的用户。有人能帮我吗?我将提供任何必要的补充资料。

cotxawn7

cotxawn71#

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 . 查看更新的代码。。。

相关问题