Intentando acceder a la compensación de matriz en el valor de tipo bool en PHP 7.4

8

Acabo de actualizar la versión de PHP de mi servidor a PHP 7.4.1 y ahora obtengo este error:
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;
}

¿Cuál es la solución para PHP 7.4?

anjanesh
fuente
if($Row['Data'] == false || is_null($Row['Data']))lo solucioné, pero me pregunto si esta es la solución correcta.
anjanesh
Depende de lo que MySQL::query()regrese cuando no se encontraron resultados.
Triby
Si no se encuentran resultados, devuelve falso, si hay un resultado, devuelve la primera fila como una matriz de asociación, public static function query($sql, $returnRow = FALSE)el segundo parámetro es VERDADERO en este caso.
anjanesh
2
Por lo tanto, primero debe verificar si $ Row es falso, solo luego intente acceder a cualquier otro valor.
Triby
Solo un aviso, la Colección de al menos Laravel 5.4 - 5.8 es incompatible con PHP 7.4, y se bloquea con este error.
Henk Poley

Respuestas:

8

Fácil con el ??operador isset Php

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

O puedes usar como tal

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

dılo sürücü
fuente
3
Woah! Esto es nuevo. Gracias.
anjanesh
Esto es realmente sorprendente ... ¡Nunca me había encontrado con ese operador! He aprendido que hay algunos más desde PHP 7: php.net/manual/en/… ...
Gwyneth Llewelyn
0

Si su consulta no devuelve una fila, entonces su variable $ Row se completará con falso, por lo que puede probar si la variable tiene un valor antes de intentar acceder a cualquier índice dentro de ella:

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