gpt4 book ai didi

php - 使用 WHERE 选择所有内容

转载 作者:可可西里 更新时间:2023-11-01 07:54:39 24 4
gpt4 key购买 nike

我目前正在处理一个存在多个访问权限的 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']);

关于php - 使用 WHERE 选择所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5578178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com