Я пишу свои собственные классы в своем приложении 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'];
}
}
?>
В моем rout.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);
Но доступ к маршруту дает мне эту ошибку:
Приложение не может быть запущено из-за следующей ошибки:
Вызов функции-члена prepare () для null
Файл: /var/www/vhosts/hosting114426.a2f69.netcup.net/httpdocs/rememberly/classes / DatabaseOperator.php Строка: 25
Trace <# 0 /var/www/vhosts/hosting114426.a2f69.netcup.net/httpdocs/rememberly/src/routes.php(209): DatabaseOperator-> getUserID ('testuser')
Так что, похоже, проблема в том, что $ dbconnection имеет значение null.Но если я использую $this->db->prepare(QUERY)
в моем rout.php, это работает без проблем.Так что $ this-> db не равно нулю.
Так в чем же проблема?