PHP 7.2 – Waarschuwing: count(): Parameter moet een array zijn of een object dat Countable implementeert

Ik heb zojuist mijn PHP-installatie geüpgraded van versie 5.6naar 7.2. Ik heb de functie count()op mijn inlogpagina als volgt gebruikt:

if (!empty($_POST['username']) && !empty($_POST['password'])):
    $records = $conn->prepare('SELECT id,username,password FROM users WHERE username = :username');
    $records->bindParam(':username', $_POST['username']);
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);
    $message = '';
    if (count($results) > 0 && password_verify($_POST['password'], $results['password'])) {
        $_SESSION['user_id'] = $results['id'];
        header("Location: /");
    } else {
        $message = 'Sorry, those credentials do not match';
    }
endif;

Na het zoeken vond ik vragen en antwoorden die vergelijkbaar waren met deze, maar ze waren allemaal gerelateerd aan WordPress en ik kon geen oplossing vinden voor Pure PHP.


Antwoord 1, autoriteit 100%

PDO fetchretourneert false bij mislukking. Dus je moet deze zaak ook controleren:

if ($results && count($results) > 0 && password_verify($_POST['password'], $results['password'])) {
    $_SESSION['user_id'] = $results['id'];
    header("Location: /");
} else {
    $message = 'Sorry, those credentials do not match';
}

Other episodes