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

Posted

技术标签:

【中文标题】尝试在 PHP 7.4 中访问 bool 类型值的数组偏移量【英文标题】:Trying to access array offset on value of type bool in PHP 7.4 【发布时间】:2022-01-03 17:12:27 【问题描述】:

我刚刚将服务器的 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 的修复方法是什么?

【问题讨论】:

if($Row['Data'] == false || is_null($Row['Data'])) 修复了它,但我想知道这是否是正确的修复。 取决于没有找到结果时MySQL::query() 返回的内容。 如果没有找到结果则返回 false ,如果有结果则返回第一行作为 assoc 数组 public static function query($sql, $returnRow = FALSE) - 在这种情况下第二个参数为 TRUE。 所以,你应该先检查 $Row 是否为假,然后再尝试访问任何其他值。 请注意,至少 Laravel 5.4 - 5.8 的 Collection 与 PHP 7.4 不兼容,并因此错误而崩溃。 【参考方案1】:

轻松使用 PHP ?? null coalescing operator

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

或者你可以这样使用

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

【讨论】:

对于 PHP 版本 $Row['data'] = isset($Row['data']) ? $Row['data'] : 'default'; 哇,它的工作... $Row['data'] = isset($Row['data']) ? $Row['data'] : '默认';【参考方案2】:

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

if($Row)
  if(is_null($Row['Data']))
  
      $session_data = '';
  ...

【讨论】:

以上是关于尝试在 PHP 7.4 中访问 bool 类型值的数组偏移量的主要内容,如果未能解决你的问题,请参考以下文章

当php中的表中没有记录时,尝试访问bool类型值的数组偏移量

试图在php中访问bool类型值的数组偏移量[重复]

Laravel Newsletter 包错误:尝试访问 bool 类型值的数组偏移量

警告:尝试访问第 41 行 C:\xampp\htdocs\crud\read.php 中 null 类型值的数组偏移量 [关闭]

js和php对bool值的判断区别

PHP基本语法