簡體   English   中英

SLIM3-在自己的類中訪問數據庫容器

[英]SLIM3 - Accessing Database container in own Class

我正在Slim 3應用程序中編寫自己的類。 我想有一個自己的課來處理數據庫查詢。 代碼如下:

<?php
class DatabaseOperator { 

    private $dbconnection;
    function __construct($dbconnection) {
        $this->dbconnection = $dbconnection;
    }

    public function getUserPermissions($user_id) {
        $user_permissions = "SELECT list_id FROM permissions WHERE user_id='$user_id'";
        $sth = $dbconnection->prepare($user_permissions);
        $sth->execute();
        $user_permissions_result = $sth->fetchAll();
        $result_permissions = array();
        foreach ($user_permissions_result as $row) {
            $list_id = $row['list_id'];
            $this->logger->info("User has access to List ID: " . $list_id);
            array_push($result_permissions, $list_id);
        }
        return $result_permissions;
    }

    public function getUserID($username) {
        $sqluser = "SELECT user_id FROM users WHERE username='$username'";
        // TODO: Android REG_ID from DB
        $sth = $dbconnection->prepare($sqluser);
        $sth->execute();
        $res = $sth->fetch(PDO::FETCH_ASSOC);
        return $res['user_id'];
    }
}
?>

在我的routes.php中,我得到了如下信息:

$app->get('/login', function (Request $request, Response $response, array $args) {
  $username = $request->getServerParam('PHP_AUTH_USER');
    if (isset($username)) {
      $this->logger->info("Authenticated user: " . $username);
      $databaseOperator = new DatabaseOperator($this->db);
      $user_id = $databaseOperator->getUserID($username);

但是訪問路線給我這個錯誤:

由於出現以下錯誤,該應用程序無法運行:
在null上調用成員函數prepare()
文件:/var/www/vhosts/hosting114426.a2f69.netcup.net/httpdocs/rememberly/classes/DatabaseOperator.php行:25
跟蹤<#0 /var/www/vhosts/hosting114426.a2f69.netcup.net/httpdocs/rememberly/src/routes.php(209):DatabaseOperator-> getUserID('testuser')

因此$ dbconnection為null似乎存在問題。 但是,如果在我的routes.php中使用$this->db->prepare(QUERY) ,它將正常工作。 因此$ this-> db不為null。

那么這是什么問題呢?

<?php
$slimSettings = [
/* ... */
];
$container = new \Slim\Container(['settings' => $slimSettings]);
$container['db'] = function ($c) {
    $dns = ''; // PDO dns
    $dbUser = ''; // database user
    $dbPass = ''; // database password
    return new \PDO($dns, $dbUser, $dbPass);
};

/* ... */
$app = new \Slim\App($container);
/* ... */
$app->get('/login', function (Request $request, Response $response, array $args) {
    $username = $request->getServerParam('PHP_AUTH_USER');
    if (isset($username)) {
        $this->logger->info("Authenticated user: " . $username);
        $databaseOperator = new DatabaseOperator($this->db);
        $user_id = $databaseOperator->getUserID($username);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM