Heim > Datenbank > MySQL-Tutorial > Warum 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?

Warum 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?

Linda Hamilton
Freigeben: 2024-11-16 09:06:03
Original
520 Leute haben es durchsucht

Why am I getting the

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage