Versuch, auf den Array-Offset für den Wert vom Typ bool in PHP 7.4 zuzugreifen

8

Ich habe gerade die PHP-Version meines Servers auf PHP 7.4.1 aktualisiert und erhalte jetzt den folgenden Fehler:
Notice: Trying to access array offset on value of type bool in

public static function read($id)
{
    $Row = MySQL::query("SELECT `Data` FROM `cb_sessions` WHERE `SessionID` = '$id'", TRUE);

    # http://php.net/manual/en/function.session-start.php#120589
    //check to see if $session_data is null before returning (CRITICAL)
    if(is_null($Row['Data']))
    {
        $session_data = '';
    }
    else
    {
        $session_data = $Row['Data'];
    }

    return $session_data;
}

Was ist das Update für PHP 7.4?

anjanesh
quelle
if($Row['Data'] == false || is_null($Row['Data']))habe es behoben, frage mich aber, ob dies die richtige Lösung ist.
Anjanesh
Hängt davon ab, was MySQL::query()zurückgegeben wird, wenn keine Ergebnisse gefunden wurden.
Triby
Wenn keine Ergebnisse gefunden werden, wird false zurückgegeben. Wenn ein Ergebnis vorliegt, wird die erste Zeile als Assoc-Array zurückgegeben. public static function query($sql, $returnRow = FALSE)In diesem Fall ist der zweite Parameter TRUE.
Anjanesh
2
Sie sollten also zuerst prüfen, ob $ Row falsch ist, und erst dann versuchen, auf einen anderen Wert zuzugreifen.
Triby
Nur ein Kopf hoch, die Sammlung von mindestens Laravel 5.4 - 5.8 ist nicht mit PHP 7.4 kompatibel und stürzt mit diesem Fehler ab.
Henk Poley

Antworten:

8

Einfach mit Php ??isset Operator

return $Row['Data'] ?? 'default value';

Oder du kannst es als solches verwenden

$Row['Data']??='default value';
 return $Row['Data'];

dılo sürücü
quelle
3
Woah! Das ist neu. Vielen Dank.
Anjanesh
Das ist wirklich erstaunlich ... Ich war noch nie auf diesen Operator gestoßen! Ich habe erfahren, dass es seit PHP 7 noch einige mehr gibt: php.net/manual/en/… ...
Gwyneth Llewelyn
0

Wenn Ihre Abfrage keine Zeile zurückgibt, wird Ihre Variable $ Row mit false gefüllt, sodass Sie testen können, ob die Variable einen Wert hat, bevor Sie versuchen, auf einen Index darin zuzugreifen:

if($Row){
  if(is_null($Row['Data']))
  {
      $session_data = '';
  }...
raul dev br
quelle