Fehler: „Versuch, auf den Array-Offset für den Wert vom Typ Bool zuzugreifen“
In diesem Codeausschnitt versuchen Sie, auf den zuzugreifen Benutzername- und E-Mail-Schlüssel in den Arrays $nameRes und $emailRes, um zu überprüfen, ob sie mit den Benutzereingaben übereinstimmen. Sie erhalten jedoch die Fehlermeldung „Es wird versucht, auf den Array-Offset für einen Wert vom Typ Bool zuzugreifen.“
Ursache
Dieser Fehler tritt auf, wenn die Datenbankabfrage einen Booleschen Wert zurückgibt Wert, normalerweise wahr oder falsch, der angibt, ob es eine Übereinstimmung in der Datenbank gibt. Wenn es keine Übereinstimmung gibt, würde die Abfrage „false“ zurückgeben. Wenn die Datenbank in Ihrem Fall keinen passenden Benutzernamen oder keine passende E-Mail-Adresse findet, gibt sie „false“ zurück, wodurch das Array „$nameRes“ oder „$emailRes“ zu einem booleschen Wert wird.
Lösung
Es gibt mehrere Möglichkeiten, mit dieser Situation umzugehen:
1. Auf Null- oder leere Ergebnisse prüfen
Bevor Sie auf die Tasten „Benutzername“ oder „E-Mail“ zugreifen, prüfen Sie, ob die Arrays null oder leer sind:
if ($nameRes && !empty($nameRes['Username']) { // Proceed with username check }
2. Standardwerte verwenden
Wenn es Ihnen egal ist, ob der Datensatz in der Datenbank vorhanden ist, weisen Sie den Schlüsseln einen Standardwert zu:
$name = $nameRes['Username'] ?? ''; $email = $emailRes['Email'] ?? ''; if ($name == $_POST['username']) { // Proceed with username check }
3. Verwenden Sie FetchColumn von PDO
Anstatt die gesamte Zeile abzurufen und in PHP zu vergleichen, verwenden Sie fetchColumn(), um nur die Anzahl der übereinstimmenden Zeilen abzurufen. Dies gibt einen einzelnen Wert zurück (entweder 0 oder eine Ganzzahl ungleich Null), den Sie in einer if-Anweisung verwenden können:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username"); $query->execute([':Username' => $name]); if ($query->fetchColumn()) { // Proceed with username check }
4. Verwenden Sie eine einzelne Abfrage
Sie können die Benutzernamen- und E-Mail-Prüfungen in einer einzigen Abfrage kombinieren, indem Sie eine ODER-Bedingung verwenden:
$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 }
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Versuch, auf den Array-Offset für einen Wert vom Typ Bool zuzugreifen', wenn ich die Ergebnisse von Datenbankabfragen überprüfe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!