php – 使用WHERE选择所有内容
我目前正在开发一个存在多个访问权限的
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子句如何使用它.此外,使用*是不可能的. 什么是最好的选择? 谢谢! 解决方法
您正在以完全错误的方式寻找解决方案.
每次你遇到你在脚本的多个部分做某事的情况,它变得一团糟,你必须创建一个函数. 实际上,对于页面上的每个查询,您仍在编写所有这些丑陋的重复代码,包括准备,执行,获取,准备,获取.这对你来说不是一团糟吗? 所以,你必须创建两个函数. 通用的,只是为了从查询中获取一些值而不重复无用的代码,使用它像这样: $proj_names_arr = $db->getColumn("SELECT project_name FROM projects"); Raisen提到的一个基于第一个的,就像这样使用 $proj_names_arr = getProjects(); 这将是您代码的唯一真正改进 至于功能,它并不难 function getColumn() { $args = func_get_args(); $query = array_shift($args); $res = $db->prepare($query); $res->execute($args); $data = array(); while ($row = $res->fetch(PDO::FETCH_NUM)) { $data[] = $row[0]; } return $data; } 所以,它可以被称为 $proj_names = $db->getColumn("SELECT project_name FROM projects WHERE user_id = ?",$_SESSION['user_id']); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |