Попытка доступа к смещению массива по значению типа bool в PHP 7.4

Я только что обновил версию 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?


person anjanesh    schedule 10.01.2020    source источник
comment
if($Row['Data'] == false || is_null($Row['Data'])) исправил, но мне интересно, правильное ли это решение.   -  person anjanesh    schedule 10.01.2020
comment
Зависит от того, что возвращает MySQL::query(), когда результаты не найдены.   -  person Triby    schedule 10.01.2020
comment
Если результаты не найдены, то он возвращает false , если результат есть, то он возвращает первую строку в виде массива assoc, public static function query($sql, $returnRow = FALSE) - в этом случае 2-й параметр TRUE.   -  person anjanesh    schedule 10.01.2020
comment
Таким образом, вы должны сначала проверить, является ли $Row ложным, и только затем попытаться получить доступ к любому другому значению.   -  person Triby    schedule 10.01.2020
comment
Просто на заметку, коллекция по крайней мере из Laravel 5.4 - 5.8 несовместима с PHP 7.4 и вылетает с этой ошибкой.   -  person Henk Poley    schedule 31.03.2020
comment
Если версия 6 работает на PHP 7.4, то я не думаю, что они будут обновлять 5.x.   -  person anjanesh    schedule 31.03.2020
comment
Недавно я также получил это сообщение об ошибке в Wordpress после обновления до PHP 8.0. После перехода на PHP 7.4 сообщение об ошибке исчезло.   -  person Peter    schedule 25.03.2021


Ответы (2)



Если ваш запрос не возвращает строку, тогда ваша переменная $Row будет заполнена значением false, поэтому вы можете проверить, имеет ли переменная значение, прежде чем пытаться получить доступ к какому-либо индексу внутри нее:

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