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!