За последние 24 часа нас посетили 10155 программистов и 1021 робот. Сейчас ищут 416 программистов ...

PHP Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool in

Тема в разделе "PHP и базы данных", создана пользователем Anton23_23, 13 май 2022.

  1. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Добрый день, нужна помощь, при открытии раздела на портале, вылазит пустая страница. Зашёл в логи ошибок, там вот такое добро: Uncaught Error: Call to a member function fetch_assoc() on bool in C:\\ProgramData\\STU-Soft\\www\\GARAGE_food_coffee\\include\\db\\mysqlroutines.common.inc:2161\nStack trace:\n#0
    Вот 2161 строчка кода:

    function db_isReportNotExpire($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    {
    $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    db_setTimeZone($cn);
    $query = "SELECT 1 FROM `reportindex`
    WHERE idobject = ".$ido."
    AND idreport = ".$idr."
    AND (from_unixtime(ri_expirationdate_tmst) > NOW() or ri_expirationdate_tmst is null)
    AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    LIMIT 1;";
    $ar = $cn->query($query)->fetch_assoc(); // 2161 строчка кода
    logError($cn, $query);
    return (is_array($ar) && sizeof($ar) > 0);
    }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.403
    Симпатии:
    1.245
    Адрес:
    Лень
  3. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Я совсем не разбираюсь в этом, поэтому и спросил здесь, чтобы мне прям тыкнули пальцем, что именно нужно изменить)
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.460
    Симпатии:
    325
    возвращает false вместо объекта, у которого есть метод fetch_assoc().
    Посмотрите, какой сформировали запрос в $query
     
  5. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Где я могу это увидеть?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.403
    Симпатии:
    1.245
    Адрес:
    Лень
    Во фрилансе по наему специалиста, а не тогда, когда работник Кафе пытается выпендриться перед начальством, при этом сам ни*уя не знает куда и зачем лезет. Приходит во форумы и с кислой моськой выкладывает кусок говнокода, указывает на причину и при этом сам палец об палец ничего для решения не сделал. Лови отзыв о себе.
     
  7. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Я просил помощь, а не комментарии о том что я ничего не знаю от рандомного типа. Если не можешь или не хочешь помочь не нужно выписывать, будь добрее чел...
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.460
    Симпатии:
    325
    Преобразуйте часть кода, например, таким образом:
    PHP:
    1. try {
    2.     $ar = $cn->query($query)->fetch_assoc(); // 2161 строчка кода
    3. }
    4. catch (\Throwable $ex) {
    5.     logError($cn, $query);
    6.     exit; // прервать выполнение (Fatal error отлаживаем)
    7. }
    И ищите там, куда лог пишется
     
    Anton23_23 нравится это.
  9. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    142
    Симпатии:
    16
    Ошибка в строке запроса:
    PHP:
    1. $query = "SELECT 1 FROM `reportindex`
    2. WHERE idobject = ".$ido."
    3. AND idreport = ".$idr."
    4. AND (from_unixtime(ri_expirationdate_tmst) > NOW() or ri_expirationdate_tmst is null)
    5. AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    6. LIMIT 1;";
    Какая ошибка, зависит от того, что запрашиваем. Ведь я не знаю что ищем.
     
    Anton23_23 нравится это.
  10. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, вечером попробую и отпишу
     
  11. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    upload_2022-5-14_20-56-19.png
     

    Вложения:

  12. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Это индексация отчетов, вот код:

    PHP:
    1. // дата создания отчета ( индексации )
    2. function db_getReportCreationDate($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL){
    3.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    4.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    5.         db_setTimeZone($cn);
    6.         $query = "SELECT DATE_FORMAT(from_unixtime(ri_creationdate_tmst),'%d.%m.%Y %H:%i') AS ri_creationdate FROM `reportindex` WHERE skbranch = ".$skbranch." and idobject = ".$ido." and idreport = ".$idr." LIMIT 1;";
    7.         $ar = $cn->query($query)->fetch_assoc();
    8.         logError($cn, $query);
    9.         if (is_array($ar) && sizeof($ar) > 0){
    10.                 return $ar['ri_creationdate'];
    11.         } else {
    12.                 return '';
    13.         }
    14. }
    15.  
    16. function db_getReportIndexBody($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL){
    17.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    18.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    19.         $query = "SELECT `body` as body FROM `reportindex` WHERE idobject = ".$ido." and idreport = ".$idr." LIMIT 1;";
    20.         $ar = $cn->query($query)->fetch_assoc();
    21.         logError($cn, $query);
    22.         if (is_array($ar) && sizeof($ar) > 0){
    23.                 return $ar['body'];
    24.         } else {
    25.                 return '';
    26.         }
    27. }
    28.  
    29. function db_isReportNotExpire($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    30. {
    31.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    32.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    33.         db_setTimeZone($cn);
    34.         $query = "SELECT 1 FROM `reportindex`
    35.                   WHERE idobject = ".$ido."
    36.                     AND idreport = ".$idr."
    37.                     AND (ri_expirationdate_tmst is not null)
    38.                     AND (from_unixtime(ri_expirationdate_tmst) > NOW() or ri_expirationdate_tmst is null)
    39.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    40.                     LIMIT 1;";
    41.         $ar = $cn->query($query)->fetch_assoc();
    42.         logError($cn, $query);
    43.         return (is_array($ar) && sizeof($ar) > 0);
    44. }
    45.  
    46. function db_isReportHaveExpireDate($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    47. {
    48.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    49.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    50.         $query = "SELECT 1 FROM `reportindex`
    51.                   WHERE idobject = ".$ido."
    52.                     AND idreport = ".$idr."
    53.                     AND (ri_expirationdate_tmst is not null)
    54.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    55.                     LIMIT 1;";
    56.         $ar = $cn->query($query)->fetch_assoc();
    57.         logError($cn, $query);
    58.         return (is_array($ar) && sizeof($ar) > 0);
    59. }
    60.  
    61. function db_ReportResetExpireDate($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    62. {
    63.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    64.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    65.         $query = 'SET @@session.time_zone = "+00:00";';
    66.         $result = $cn->query($query);
    67.         logError($cn, $query);
    68.         $query = "UPDATE `reportindex`
    69.                     SET ri_expirationdate_tmst = UNIX_TIMESTAMP(NOW())
    70.                   WHERE  idobject = ".$ido."
    71.                     AND idreport = ".$idr."
    72.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch).";";
    73.         $result = $cn->query($query);
    74.         logError($cn, $query);
    75. }
    76.  
    77. function db_getReportIDLanguage($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    78. {
    79.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    80.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    81.         $query = "SELECT `idlanguage` FROM `objectsreports`
    82.                   WHERE  idobject = ".$ido."
    83.                     AND idreport = ".$idr."
    84.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch).";";
    85.         $ar = db_runQueryAndReturnArray($cn, $query);
    86.         if (is_array($ar) && sizeof($ar) > 0){
    87.                 return $ar[0]['idlanguage'];
    88.         } else {
    89.                 return $idlanguage;
    90.         }
    91. }
    92.  
    93. function db_isObjectsReportsExits($cn, $oguid, $rguid, $idlanguage, $skbranch = NULL)
    94. {
    95.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    96.         $idr = db_getIDReportByGuid($cn, $rguid, $idlanguage, $skbranch);
    97.         $query = "SELECT 1 FROM objectsreports
    98.                   WHERE idobject = ".$ido."
    99.                     AND idreport = ".$idr."
    100.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    101.                     LIMIT 1;";
    102.         $ar = $cn->query($query)->fetch_assoc();
    103.         logError($cn, $query);
    104.         return (is_array($ar) && sizeof($ar) > 0);
    105. }
    106.  
    107.  
    108.  
    109. function db_isObjectExits($cn, $oguid, $skbranch = NULL)
    110. {
    111.         $query = "SELECT 1
    112.                        FROM objects WHERE o_guid = '".$oguid."'
    113.                        AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    114.                        LIMIT 1;";
    115.         $ar = $cn->query($query)->fetch_assoc();
    116.         logError($cn, $query);
    117.         return (is_array($ar) && sizeof($ar) > 0);
    118. }
    119.  
    120. function db_isObjectsMultianguage($cn, $oguid, $rguid, $skbranch = NULL)
    121. {
    122.         $ido = db_getIDObjectByGuid($cn, $oguid, $skbranch);
    123.         $idr = db_getIDReportByGuid($cn, $rguid, 0, $skbranch);
    124.         $query = "SELECT 1 FROM objectsreports
    125.                   WHERE idobject = ".$ido."
    126.                     AND idreport = ".$idr."
    127.                     AND (idlanguage IS NULL or idlanguage = 0)
    128.                     AND skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    129.                     LIMIT 1;";
    130.         $ar = $cn->query($query)->fetch_assoc();
    131.         logError($cn, $query);
    132.         return (is_array($ar) && sizeof($ar) > 0);
    133. }
    134.  
    135. function db_getUserRightsToReport($cn, $user_ids, $rguid, $oguid, $idlanguageContent, $skbranch = NULL)
    136. {
    137.     if (null === $user_ids || $user_ids[0] == 0 )
    138.         return true;
    139.  
    140.     $ids = implode(",", $user_ids);
    141.  
    142.         $deflangid = db_getDefaultLangID($cn);
    143.         $addSelectWithDefaultLang = "".($deflangid != null && $deflangid <> $idlanguageContent ? "OR rep.idlanguage = ".$deflangid." " : "");
    144.  
    145.     //9791 Сначала запретим те отчеты, на которые стоит явный запрет
    146.     $query = "SELECT DISTINCT 1 FROM rightsreports as rr INNER JOIN reports as rep ON rr.idreport = rep.idreport AND rr.skbranch = rep.skbranch
    147.                        WHERE rr.iduser in (".$ids.")
    148.                        AND rep.skbranch = ".($skbranch == NULL ? "(SELECT `skbranch` FROM `branches` WHERE ismain = 1 LIMIT 1)": $skbranch)."
    149.                        AND rep.r_guid='".mysqli_real_escape_string($cn,$rguid)."'
    150.                        AND (rep.idlanguage = ".$idlanguageContent." OR rep.idlanguage IS NULL OR rep.idlanguage = 0 ".$addSelectWithDefaultLang.")
    151.                        AND `deny_allow` = 0;";
    152.     $ar = $cn->query($query)->fetch_assoc();
    153.     logError($cn, $query);
    154.     if (is_array($ar) && sizeof($ar) > 0)
    155.         return null;
    156.     //9791 Теперь разрешим доступ к отчету, если объект отчета - наше физлицо.
    157.     if ($oguid != ""){
    158.        $query = "SELECT DISTINCT 1 FROM users as u WHERE u.iduser in (".$ids.") and u.user_guid='".mysqli_real_escape_string($cn,$oguid)."';";
    159.        $ar = $cn->query($query)->fetch_assoc();
    160.        logError($cn, $query);
    161.        if (is_array($ar) && sizeof($ar) > 0)
    162.             return true;
    163.     }
     
  13. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    142
    Симпатии:
    16
    Тогда что это за запрос :
    $query="SELECT 1 FROM
    Что тут выбирается? цифра 1?
     
  14. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Понятия не имею
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.403
    Симпатии:
    1.245
    Адрес:
    Лень
    Отлично

    Помощь !== Раздел "сделай за меня"
     
  16. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.460
    Симпатии:
    325
    Очевидно ведь, что для констатации факта наличия :)
    --- Добавлено ---
    @Anton23_23, return забыли оставить вне (после) блока try - catch.
    --- Добавлено ---
    @Anton23_23, а искать результат (текст сформированного запроса) надо там, куда его функция logError пишет.
     
  17. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    142
    Симпатии:
    16
    По моему там еще и фигурной скобки не хватает. Блок try catch оказался вне функции.
     
  18. Anton23_23

    Anton23_23 Новичок

    С нами с:
    13 май 2022
    Сообщения:
    9
    Симпатии:
    0
    Еще заметил в строке вот такую ошибку, может быть она как-то поможет:
    upload_2022-5-15_15-49-7.png
     
  19. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.460
    Симпатии:
    325
    @Anton23_23, фигурной скобки, завершающей функцию db_isReportNotExpire не хватает