添加第二个WHERE子句或使用PHP解析结果?

添加第二个WHERE子句或使用PHP解析结果?,php,mysql,where,Php,Mysql,Where,我的代码提取报告的详细信息,但我只希望在特定报告与试图查看该报告的用户关联时显示详细信息。我想知道在查询中添加第二个WHERE子句是否更有效/更合适,或者是否应该使用PHP检查关联的用户id?我更喜欢后者,因为它更容易让管理员访问所有记录 <?php $query = mysql_query("SELECT report_id, report_user, report_text FROM reports

我的代码提取报告的详细信息,但我只希望在特定报告与试图查看该报告的用户关联时显示详细信息。我想知道在查询中添加第二个
WHERE
子句是否更有效/更合适,或者是否应该使用PHP检查关联的用户id?我更喜欢后者,因为它更容易让管理员访问所有记录

<?php
$query = mysql_query("SELECT report_id, report_user, report_text
                        FROM reports
                        WHERE report_id = '$rid'
                        AND report_user = '$uid'");

$report = mysql_fetch_assoc($query);
?>

提前谢谢!
Billy

我认为您应该在查询选项中使用过滤。它效率更高,可以更好地保护用户隐私,以防php代码中出现错误。关于管理员查看报告的能力,您可以动态地创建查询

$sql = "SELECT report_id, report_user, report_text
                        FROM reports
                        WHERE report_id = ?";
if($userContext)
{

    $sql .= " AND report_user = ?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('dd', $rid, $uid);
}
else //admin context
{
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('d', $rid);
}

无论你做什么,都要确保绑定变量。

我认为你应该在查询选项中进行过滤。它效率更高,可以更好地保护用户隐私,以防php代码中出现错误。关于管理员查看报告的能力,您可以动态地创建查询

$sql = "SELECT report_id, report_user, report_text
                        FROM reports
                        WHERE report_id = ?";
if($userContext)
{

    $sql .= " AND report_user = ?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('dd', $rid, $uid);
}
else //admin context
{
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('d', $rid);
}

无论您做什么,都要确保绑定变量。

最好的方法是动态执行第一个查询,以确定管理员是否登录。大概是这样的:

query = ".."

if (user != admin)
    query .= " AND report_user = " . intval(user_id)

最好的方法是使第一个查询动态化,以确定管理员是否登录。大概是这样的:

query = ".."

if (user != admin)
    query .= " AND report_user = " . intval(user_id)

假设您的表被正确地索引,那么性能上的差异是最小的。有人可能会说SQL方法不太容易出错,因为它不依赖于PHP逻辑。另一方面,如果使用第二种方法,则更容易向用户提供有意义的错误消息,因为这样就可以确定没有报告显示的确切原因。在第一种方法中,您不知道该报告是否不存在,或者是否只允许用户查看它。然而,我会选择第一个


也应该考虑使用PDO。也许您只是为了示例而使用了您所使用的技术,但只是说。

假设您的表被正确地索引,那么性能上的差异是最小的。有人可能会说SQL方法不太容易出错,因为它不依赖于PHP逻辑。另一方面,如果使用第二种方法,则更容易向用户提供有意义的错误消息,因为这样就可以确定没有报告显示的确切原因。在第一种方法中,您不知道该报告是否不存在,或者是否只允许用户查看它。然而,我会选择第一个


也应该考虑使用PDO。也许您只是为了示例而使用了您所使用的技术,但只是说。

我不认为对所有内容进行一次查询是一个好主意。我不认为对所有内容进行一次查询是一个好主意。谢谢。关于PDO,计划是在网站上线后转换所有内容。我知道这并不理想,但我已经远远落后了,我没有时间学习新方法。我在不断地学习,已经足够了。不过我真的很感谢你的意见比莉谢谢你。关于PDO,计划是在网站上线后转换所有内容。我知道这并不理想,但我已经远远落后了,我没有时间学习新方法。我在不断地学习,已经足够了。不过我真的很感谢你的意见比利