Maison  >  Article  >  base de données  >  Pourquoi est-ce que j'obtiens une erreur « Essayer d'accéder au décalage du tableau sur une valeur de type bool » dans mon code PHP ?

Pourquoi est-ce que j'obtiens une erreur « Essayer d'accéder au décalage du tableau sur une valeur de type bool » dans mon code PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-18 02:19:02308parcourir

Why Am I Getting a

Impossible d'accéder au décalage du tableau sur une valeur booléenne en PHP

Rencontrer l'erreur "Essayer d'accéder au décalage du tableau sur une valeur de type bool" en PHP signifie que le code tente pour récupérer un élément de tableau à partir d'une valeur qui n'est pas un tableau, dans ce cas, un booléen.

Dans le code fourni, vous êtes interroger la base de données pour les utilisateurs en fonction de leur nom d'utilisateur et de leur adresse e-mail. Dès réception d'un résultat, vous vérifiez si le nom d'utilisateur ou l'e-mail existe déjà en comparant la réponse de la base de données avec l'entrée du formulaire d'inscription.

Cependant, l'erreur se produit lorsque la requête de la base de données ne renvoie aucun enregistrement correspondant aux critères. Par conséquent, $emailRes (et $nameRes) devient un booléen (faux) au lieu d'un tableau associatif. Par conséquent, l'accès à $emailRes['Email'] génère l'erreur puisque vous ne pouvez pas accéder à un décalage de tableau sur une valeur booléenne.

Résoudre le problème

Vérifier les résultats de la base de données :

La solution la plus simple consiste à vérifier d'abord si la requête de base de données renvoie des résultats avant de tenter d'accéder au $emailRes. array.

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
if ($emailRes) {
    // Proceed to use $emailRes
}

Fournir une valeur par défaut :

Si vous ne vous souciez pas de savoir si la base de données a renvoyé quelque chose, vous pouvez fournir une valeur par défaut.

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
$email = $emailRes['Email'] ?? ''; // Default: empty string

Approche alternative :

Une meilleure pratique consiste à utiliser les AOP rowCount() ou fetchColumn() pour vérifier l'existence de lignes dans la base de données, évitant ainsi le résultat booléen potentiel.

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username");
$query->execute([':Username' => $name]);
if ($query->fetchColumn()) {
    throw new \Exception("Username is already in use!");
}

En vérifiant le nombre de lignes au lieu de récupérer les données, vous éliminez la possibilité de recevoir un résultat booléen, garantissant que vous ne rencontrerez pas l'erreur « décalage du tableau sur booléen ».

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!

Déclaration:
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