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

Trying to access array offset on value of type bool in PHP 7.4

提问人:anjanesh 提问时间:1/10/2020 最后编辑:Dharmananjanesh 更新时间:8/27/2021 访问量:298857

问:

我刚刚将服务器的PHP版本升级到PHP 7.4.1,现在出现此错误:

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

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 的修复程序是什么?

PHP 的 php-7.4

评论

0赞 anjanesh 1/10/2020
if($Row['Data'] == false || is_null($Row['Data']))修复了它,但我想知道这是否是正确的修复。
1赞 Triby 1/10/2020
取决于未找到结果时返回的内容。MySQL::query()
0赞 anjanesh 1/10/2020
如果没有找到结果,则返回 false ,如果有结果,则将第一行作为关联数组返回, - 在这种情况下,第二个参数为 TRUE。public static function query($sql, $returnRow = FALSE)
3赞 Triby 1/10/2020
因此,您应该先检查$Row是否为 false,然后才尝试访问任何其他值。
1赞 Henk Poley 3/31/2020
请注意,至少 Laravel 5.4 - 5.8 的集合与 PHP 7.4 不兼容,并因此错误而崩溃。

答:

12赞 raul dev br 1/11/2020 #1

如果你的查询没有返回一行,那么你的变量 $Row 将被填充为 false, 因此,您可以在尝试访问其中的任何索引之前测试变量是否具有值:

if($Row){
  if(is_null($Row['Data']))
  {
      $session_data = '';
  }...
79赞 dılo sürücü 1/11/2020 #2

轻松使用 PHP ? null 合并运算符

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

或者你可以这样使用

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

评论

6赞 F. Müller 8/16/2020
对于 PHP 7 <版本,您还可以使用三元语句:$Row['data'] = isset($Row['data']) ? $Row['data'] : 'default';
0赞 Lisan E 11/30/2021
哇,它正在工作...... $Row['data'] = isset($Row['data']) ?$Row['data'] : '默认';