在PHP 7.4中尝试访问布尔类型值的数组偏移量

54

我刚将服务器的PHP版本升级至PHP 7.4.1,现在出现了以下错误:

注意:尝试访问布尔类型值的数组偏移量

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;
}

PHP 7.4 的修复方式是什么?


1
取决于当没有结果被找到时MySQL::query()返回什么。 - Triby
如果没有找到结果,则返回false,如果有结果,则将第一行作为关联数组返回,public static function query($sql, $returnRow = FALSE) - 在这种情况下,第二个参数为TRUE。 - anjanesh
3
因此,您应该首先检查$Row是否为false,然后再尝试访问任何其他值。 - Triby
1
提醒一下,至少从 Laravel 5.4 到 5.8 的 Collection 与 PHP 7.4 不兼容,并会因此崩溃并显示错误。 - Henk Poley
我最近在将WordPress升级到PHP 8.0后也遇到了这个错误消息。降级到PHP 7.4后,错误消息消失了。 - Peter
显示剩余2条评论
2个回答

78

使用 PHP 中的 ?? null 合并运算符 很简单

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

或者您可以像这样使用

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

6
对于 PHP 版本 < 7 ,你也可以使用三元运算符:$Row['data'] = isset($Row['data']) ? $Row['data'] : 'default'; - F. Müller
哇,它正在工作中... $Row['data'] = isset($Row['data']) ? $Row['data'] : 'default'; - Lisan E

12
如果您的查询没有返回任何行,那么变量$Row将会被填充为false,因此在尝试访问其中任何索引之前,您可以测试该变量是否有值:
if($Row){
  if(is_null($Row['Data']))
  {
      $session_data = '';
  }...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接