加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用WHERE选择所有内容

发布时间:2020-12-13 21:41:06 所属栏目:PHP教程 来源:网络整理
导读:我目前正在开发一个存在多个访问权限的 PHP项目.逻辑很简单: – 当您的访问级别为2时,您只能看到自己项目的列表 – 当您的访问级别为3时,您可以看到所有项目 所以在SQL中: 第一: SELECT project_name FROM projects 第二个: SELECT project_name FROM pr
我目前正在开发一个存在多个访问权限的 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']);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读