因此,我正在创建一个管理用户的系统,并在永久删除记录之前实现了一个“回收站”作为一个健全性检查。
为此,我在表中添加了一个名为deleted的bool(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()的快捷方式。
因此,基本上,它可以找到所有已删除的用户,但不是所有未删除的用户。
有人能帮我吗?我将提供任何必要的补充资料。

最佳答案

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);
}

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

关于php - 无法正确过滤数据库结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54052810/

10-12 03:27