首页 > 解决方案 > 什么时候应该使用 RedBean 连接到我的数据库?

问题描述

我正在使用 RedBean 制作注册和登录系统,但我在试图弄清楚何时应该使用 R:setup(); 时遇到了一些麻烦。

首先,我在索引页面的顶部使用 R::setup(即使我不需要从该页面访问我的数据库。我应该这样做吗?)。

接下来,我在函数文件中使用它,在注册和登录期间我会从中调用一些函数:

function checkUidTaken ($uid) {

    require_once('../rb.php');
    R::setup('sqlite:database.sqlite');

    $uids = R::getCol('select uid from admins');

    if (in_array($uid, $uids)) {
        $result = true;
    } else {
        $result = false;
    }
    return $result;
};

function createAdmin ($name, $uid, $pwd) {

    require_once('../rb.php');
    R::setup('sqlite:database.sqlite');

    $pwd = password_hash($pwd, PASSWORD_DEFAULT);

    $admin = R::dispense('admins');
    
    $admin->name = $name;
    $admin->uid = $uid;
    $admin->pwd = $pwd;

    R::store($admin);

    header('location: ../admin-panel.php');
    exit();
};

如您所见,我按函数调用它,但这会导致错误。

已经为此键指定了一个数据库。

据我了解,这是因为我连续两次设置我的数据库。我试图通过在每个函数结束时关闭数据库来解决这个问题,但没有成功。

如果我省略了第一个功能,这个系统就可以工作。但是,在我的登录系统中,通过两次设置数据库(因为它已经在注册期间设置,然后在登录期间设置),我得到了同样的错误。

如果我不设置我的数据库,我会收到另一个错误:Call to a member function isFrozen() on null

那是我仍然需要 rb.php 的时候。

当我应该设置我的数据库时,你能回答我吗?已经设置好后,我应该如何在需要时再次访问它?我应该创建某种句柄吗?如果是这样,怎么做?

标签: phpdatabasesqlitewebredbean

解决方案


推荐阅读