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 }
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 }
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 }
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 }
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!