Подтверждение почты — неверный токен

Со вчерашнего дня я имею дело с проблемой подтверждения токена.
Таким образом, веб-сайт должен прислать мне электронное письмо, где есть идентификатор и токен.
Но когда я нахожусь по URL-адресу, он говорит неверный токен, и я не могу понять, почему

Вот код

confirm.php

    <?php
require '../class/Bootstrap.php';
$db = App::getDatabase();
$auth = new Auth($db);

if($auth->confirm($_GET['id'],$_GET['token'], Session::getInstance())){

Session::getInstance()->setFlash('success',"OK, valid account");
App::redirect('../account.php');
}
else{
Session::getInstance()->setFlash('danger',"Invalid token");
App::redirect('login.php');
}

Сессионный класс

class Session{

static $instance;

static function getInstance(){
if(!self::$instance){
self::$instance = new Session();
}
return self::$instance;
}

public function write($key, $value){
$_SESSION[$key] = $value;
}

public function read($key){
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}

public function delete($key){
unset($_SESSION[$key]);
}

Аут класс

  public function confirm($user_id,$token, $session){

$user = $this->db->query('SELECT * FROM users WHERE id = ?', [$user_id]);
if($user && $user->confirmation_token == $token ){
$this->db->query('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?', [user_id]);
$session->write('auth',$user);
return true;
}
return false;

}

может кто-нибудь сказать мне, где я не прав? Спасибо

-1

Решение

PDO::query не принимает данные в качестве второго параметра. Так что это не может быть использовано для подготовленных заявлений.

Вы хотите использовать PDO::prepare с PDOStatement::execute:

$sth = $this->db->prepare('SELECT * FROM users WHERE id = ?');
$sth->execute(array($user_id));
0

Другие решения

Других решений пока нет …