Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi est-ce que je reçois l'erreur « Essayer d'accéder au décalage du tableau sur la valeur de type Bool » lors de la vérification des résultats de la requête de base de données ?

Linda Hamilton
Libérer: 2024-11-16 09:06:03
original
451 Les gens l'ont consulté

Why am I getting the

Erreur : "Essayer d'accéder au décalage du tableau sur la valeur de type Bool"

Dans cet extrait de code, vous essayez d'accéder au Clés Nom d'utilisateur et Email dans les tableaux $nameRes et $emailRes pour vérifier si elles correspondent aux entrées de l'utilisateur. Cependant, vous obtenez l'erreur "Essayer d'accéder au décalage du tableau sur une valeur de type bool."

Cause

Cette erreur se produit lorsque la requête de base de données renvoie un booléen. valeur, généralement vraie ou fausse, indiquant s'il existe une correspondance dans la base de données. S'il n'y a pas de correspondance, la requête renvoie false. Dans votre cas, lorsque la base de données ne trouve pas de nom d'utilisateur ou d'adresse e-mail correspondant, elle renvoie false, faisant du tableau $nameRes ou $emailRes une valeur booléenne.

Solution

Il existe plusieurs façons de gérer cette situation :

1. Vérifiez les résultats nuls ou vides

Avant d'accéder aux clés Nom d'utilisateur ou E-mail, vérifiez si les tableaux sont nuls ou vides :

if ($nameRes && !empty($nameRes['Username']) {
    // Proceed with username check
}
Copier après la connexion

2. Utiliser les valeurs par défaut

Si vous ne vous souciez pas de savoir si l'enregistrement existe dans la base de données, attribuez une valeur par défaut aux clés :

$name = $nameRes['Username'] ?? '';
$email = $emailRes['Email'] ?? '';

if ($name == $_POST['username']) {
    // Proceed with username check
}
Copier après la connexion

3. Utilisez FetchColumn de PDO

Au lieu de récupérer la ligne entière et de la comparer en PHP, utilisez fetchColumn() pour récupérer uniquement le nombre de lignes correspondantes. Cela renvoie une valeur unique (soit 0, soit un entier non nul), que vous pouvez utiliser dans une instruction if :

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username");
$query->execute([':Username' => $name]);
if ($query->fetchColumn()) {
    // Proceed with username check
}
Copier après la connexion

4. Utiliser une requête unique

Vous pouvez combiner les vérifications du nom d'utilisateur et de l'e-mail en une seule requête en utilisant une condition OU :

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username OR Email = :Email");
$query->execute([':Username' => $name, ':Email' => $email]);
if ($query->fetchColumn()) {
    // Proceed with username/email check
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal