0

我需要一个查询来在数据库中搜索数据库同一列中列出的一组数字中的特定数字。

数据库Access将包含两列

第一列:页面名称

第二栏:访问

并且会设置类似:页面名称:Blog-Admin 访问权限:60,61,62,76,83,94

其中访问列中的数字是允许查看页面的等级。

在每个页面上,都会有一个查询来查找用户排名并将其存储在 $URank 变量中。

Access每个页面都在一个变量 ($PageName) 中命名,该变量将匹配数据库中的页面名称列

在此查询中,它需要在 Access 列中搜索该页面的用户排名(页面名称 = $PageName)

通过将其存储在数据库中,它将允许管理员随时修改谁可以访问哪些页面。

我只需要搜索数据库的查询,以确保用户排名有权访问该页面。

这可能很简单,不确定。

我习惯于诸如 mysql_query("select * from database where blahblah=viarable") 之类的查询...所以如果可以以这种格式回答,那就太好了。即使它是 mysqli 等价物。

4

1 回答 1

1

编辑:好的,听起来您正在做的是在 Access 列中存储一串允许的等级。这是一个非常糟糕的主意。它很难管理,并且需要在 PHP 中进行大量额外的工作。你应该做的是使用两个表,结构如下:

create table Pages (
    id int primary key auto_increment,
    name varchar(200)
);

create table Page_access (
    page_id int,
    rank int
);

因此,您将在表中存储所有页面(仅此而已)的Pages列表。然后,将Page_access所有可能的页面 ID 组合(来自Pages表)和这些页面的接受用户排名添加到表中,因此Page_access可能类似于:

|page_id | rank |
|   1    |  60  |
|   1    |  61  |
|   1    |  62  |
|   2    |  70  |
|   2    |  71  |

... 等等。这意味着您的表中可能会出现数百行 - 没关系!这是一个规范化的表,如果您索引列的性能将不会受到影响。

或者,如果你知道你总是会接受一个范围内的排名,你可以Page_access像这样构建你的表格:

create table Page_access (
    page_id int,
    min_rank int,
    max_rant int
);

然后只需检查用户的排名是否在使用 SQL 的页面的最小和最大排名之间between。我希望这有助于组织您的表格,但我知道它仍然不能回答您最初的问题(如何编写 SQL 语句)。我建议确保你有一个好的表结构,然后在你尝试编写实际查询后提出另一个更具体的问题。


原答案:

假设您正在使用mysqli

#connect to your database
$mysqli = new mysqli('localhost', $database_username, $database_password, 'Access');

#prepare and run the query
if($stmt = $mysqli->prepare('select URank from Access where URank = ?')) {
    $stmt->bind_param('i', $URank);
    $stmt->execute();
    $stmt->bind_result($exists);
    $stmt->fetch();

    if($exists) {
        #the URank was found in the table
    } else {
        #not found
    }
    $stmt->close();
}

像这样的东西应该可以解决问题。我鼓励您在使用上面的示例之前阅读mysqli准备好声明。在编写数据库查询时,您确实需要了解自己在做什么。

于 2012-10-18T17:37:54.773 回答