尝试在 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类型值的数组偏移量
Laravel Newsletter 包错误:尝试访问 bool 类型值的数组偏移量
警告:尝试访问第 41 行 C:\xampp\htdocs\crud\read.php 中 null 类型值的数组偏移量 [关闭]