Heim  >  Artikel  >  Datenbank  >  Warum erhalte ich in PHP die Fehlermeldung „Versuch, auf den Array-Offset für den Wert vom Typ Bool zuzugreifen“?

Warum erhalte ich in PHP die Fehlermeldung „Versuch, auf den Array-Offset für den Wert vom Typ Bool zuzugreifen“?

Barbara Streisand
Barbara StreisandOriginal
2024-11-18 04:17:03311Durchsuche

Why Am I Getting a

Fehler „Versuch, auf den Array-Offset für den Wert vom Typ Bool zuzugreifen“ in PHP

Der Fehler „Versuch, auf den Array-Offset für den Wert von zuzugreifen „type bool“ tritt auf, wenn Sie versuchen, auf ein Element eines Arrays zuzugreifen, das nicht existiert oder einen ungültigen Typ hat, insbesondere a boolean.

Im bereitgestellten Codeausschnitt führen Sie Abfragen aus, um zu überprüfen, ob ein Benutzername oder eine E-Mail-Adresse bereits in der Datenbank vorhanden ist. Wenn die Abfrage keine Ergebnisse zurückgibt, weist sie der entsprechenden Variablen ($emailRes oder $nameRes) „false“ zu.

Wenn Sie dann versuchen, auf den Benutzernamen- oder E-Mail-Schlüssel von $nameRes oder $emailRes zuzugreifen, werden Sie bekomme den Fehler, weil beide boolesche Werte sind, nicht Arrays.

Lösung:

1. Auf Existenz prüfen:

Bevor Sie auf die Array-Offsets zugreifen, prüfen Sie, ob die Datenbank Ergebnisse zurückgegeben hat:

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

2. Standardwert zuweisen:

Wenn es Ihnen egal ist, ob die Datenbank etwas zurückgegeben hat, können Sie einen Standardwert zuweisen:

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

3. Verwenden Sie fetchColumn() von PDO für die Existenzprüfung:

Eine effizientere Möglichkeit, die Existenz in der Datenbank zu überprüfen, ist die Verwendung von fetchColumn():

if ($query->fetchColumn()) {
    // Record exists
}
else {
    // Record does not exist
}

4. Ein-Abfrage-Ansatz:

Sie können auch in einer Abfrage prüfen, ob sowohl Benutzername als auch E-Mail-Adresse vorhanden sind:

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username =:Username OR Email =:Email");
$query->execute([':Username' => $name, ':Email' => $email]);
if ($query->fetchColumn()) {
    // Username or email already exist
}
else {
    // Username and email are both available
}

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP die Fehlermeldung „Versuch, auf den Array-Offset für den Wert vom Typ Bool zuzugreifen“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn