我目前正在开发一个存在多个访问权限的
PHP项目.逻辑很简单:
– 当您的访问级别为2时,您只能看到自己项目的列表
– 当您的访问级别为3时,您可以看到所有项目
所以在SQL中:
第一:
SELECT project_name FROM projects
第二个:
SELECT project_name FROM projects WHERE user_id = user_id
问题是我正在使用带有预处理语句的PDO,并且这些查询在脚本中执行多次.这是它的样子:
if ($_SESSION['access_level'] == 3) {
$sql = "SELECT project_name FROM projects";
} else {
$sql = "SELECT project_name FROM projects WHERE user_id = ?";
}
$res = $db->prepare($sql);
// Some more PHP
if ($_SESSION['access_level'] == 3)
$res->execute();
else
$res->execute(array($_SESSION['user_id']));
正如我在脚本的多个部分中这样做,它变得一团糟.有一个更好的方法吗?就个人而言,我在想一个WHERE子句,其中每个记录都被选中.这样就可以在脚本开头了:
if ($_SESSION['access_level'] == 3)
$id = *;
else
$id = $_SESSION['user_id'];
现在查询更容易:
$res = $db->prepare("SELECT project_name FROM projects WHERE user_id = ?");
$res->execute(array($id));
(现在,当您的访问级别为3时,它将获取所有记录,但只有当您的级别为2时才会获得自己的记录)
这看起来像一个漂亮的转储解决方案,因为我并没有真正使用WHERE子句如何使用它.此外,使用*是不可能的.
什么是最好的选择?
谢谢!