【问题标题】:Unable to filter database results correctly无法正确过滤数据库结果
【发布时间】:2019-05-31 20:15:39
【问题描述】:

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

我通过在我的表中添加一个名为 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() 的快捷方式。

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

【问题讨论】:

  • 认为您需要使用 1/0 而不是 true/false 进行搜索。 (.($deleted?1:0); 可以做到)

标签: php mysql oop model-view-controller


【解决方案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 的检查。查看更新的代码...

【讨论】:

  • 问题是$deleted = null - 如果没有传递任何值,它将查找已删除的记录。虽然这是主要问题。
  • 默认为null的原因是因为我也有没有'deleted'标志的表,所以我还需要能够不带参数调用select_all()。
  • 您可以在此解决方案中添加额外的if ($deleted != null) 级别。
  • @NigelRen 编辑解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2015-07-19
  • 2016-02-15
相关资源
最近更新 更多