Tentando acessar o deslocamento da matriz no valor do tipo bool no PHP 7.4

8

Acabei de atualizar a versão PHP do meu servidor para PHP 7.4.1 e agora obtendo este erro:
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;
}

Qual é a correção para o PHP 7.4?

anjanesh
fonte
if($Row['Data'] == false || is_null($Row['Data']))corrigi-lo, mas estou querendo saber se esta é a correção certa.
anjanesh 10/01
Depende do que MySQL::query()retorna quando nenhum resultado foi encontrado.
Triby
Se nenhum resultado for encontrado, ele retornará false, se houver um resultado, ele retornará a primeira linha como uma matriz assoc, public static function query($sql, $returnRow = FALSE)- o segundo parâmetro é TRUE neste caso.
anjanesh 10/01
2
Portanto, você deve verificar se $ Row é falso primeiro e somente tentar acessar qualquer outro valor.
Triby
Apenas um alerta, a coleção pelo menos do Laravel 5.4 - 5.8 é incompatível com o PHP 7.4 e trava com este erro.
Henk Poley

Respostas:

8

Fácil com o ??operador php isset

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

Ou você pode usar como tal

$Row['Data']??='default value';
 return $Row['Data'];
dılo sürücü
fonte
3
Woah! Isso é novo. Obrigado.
anjanesh 13/01
Isso é realmente incrível ... Eu nunca havia encontrado aquele operador! Eu aprendi que existem alguns mais desde o PHP 7: php.net/manual/en/… ...
Gwyneth Llewelyn
0

Se sua consulta não retornar uma linha, sua variável $ Row será preenchida com false, para que você possa testar se a variável possui um valor antes de tentar acessar qualquer índice dentro dela:

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