Ошибка использования fetch-а

Есть главная страница сайта - см. https://jsfiddle.net/vladdvin/e120g4sq/3/. По щелчку на пункте левого бокового меню должно отображаться правое боковое меню и центральная часть с помощью ajax. Ниже приведена часть кода со страницы - http://testsite.ru/stackoverflowsite/html/testsite.html.

        let subcategoryflag=''; <!--подкатегория меню-->
        console.log(subcategoryflag); <!--отладка-->
            $('.submenu__item a').on('click', function (event) {
                event.preventDefault();
                console.log('Inner check');<!--отладка-->               
                subcategoryflag=event.target.innerHTML; <!--присваивание текста подкатегории меню-->
                $.ajax ({
                    method: 'POST',
                    url: '../php/ajaxsubcategory1.php',
                    cache: false,
                    data: {subcategoryflag: subcategoryflag}, <!--отсылка на сервер подкатегории меню, в зависимости от которой сервер посылет правое боковое меню--> 
                    dataType: 'json',
                    complete: function(data) {<!--отладка ajax-->
                        console.log(data.header);
                        console.log(data.countrecords);
                    },
                    success: function (data) {
                        console.log('check');<!--отладка-->
                        console.log(data);<!--отладка-->
                        $('.rightmenu').html(data.msg);
                        $('.centerarea').html('<div id=\"topcenterarea\">' +'<h1>'+data.header+'</h1>'+data.countrecords+'товара'+'</div>'); <!-- присваивание блоку правого бокового меню-->

                        //expandCollapsedFunction();
                        
                }
            

            }
            );
        }
        );      
        
        // такой же код, что и код выше - только для черных пунктов меню типа Моноблоки 
        let categoryflag='';
            $('.submenu__title a').on('click', function (event) {
                event.preventDefault();
                console.log('Inner check');             
                categoryflag=event.target.innerHTML;
                subcategoryflag=categoryflag;
                console.log(categoryflag);
                $.ajax ({
                    method: 'POST',
                    url: '../php/ajaxsubcategory1.php',
                    cache: false,                   
                    data: {categoryflag: categoryflag, subcategoryflag: subcategoryflag},
                    dataType: 'json',
                    complete: function(data) {
                        console.log(data.header);
                        console.log(data.countrecords);
                    },
                    success: function (data) {
                        console.log('check');
                        console.log(data);
                        $('.rightmenu').html(data.msg);
                        $('.centerarea').html('<div id=\"topcenterarea\">'+'<h1>'+data.header+'</h1>'+data.countrecords+'товара'+'</div>'); 

                        //expandCollapsedFunction();
                }
            }
            );
        }
        );

<?php
class ajaxValidate {

    function formValidate() {
        //Put form elements into post variables (this is where you would sanitize your data)
        $categoryflag=$_POST['categoryflag'];
        $subcategoryflag = $_POST['subcategoryflag'];

        //Establish values that will be returned via ajax
        $return = array();
        $return['msg'] = '';
        $return['error'] = false;
        $return['querycontent']='';
        $return['header']='Моноблоки';
        $return['countrecords']=0;
        
        require_once('config.php');
        $pdo = new PDO($dsn, $user, $password);

        //Begin form validation functionality
        if (!isset($subcategoryflag) || empty($subcategoryflag)){
            $return['error'] = true;
            $return['msg'] .= '<li>Error: Field1 is empty.</li>';
        }
        
        //Begin form success functionality
        if ((!$return['error']) && $subcategoryflag=='Моноблоки'){
            $return['msg'] = '          <div><div class="FilterContainer"><div class="FilterSeoGroup FilterSeoGroup__seo" id="popularCollections"><h4 class="FilterSeoGroup__header">Популярные подборки</h4><div class="FilterSeoGroup__group_closed"><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--nedorogie-monobloki/">Недорогие</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--dlya-doma-m/">Для дома</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--dlya-ofisa-m/">Для офиса</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--win/">с Windows</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--imac/">Apple iMac</a></div></div><div class="FilterSeoGroup__toggle-container"><button class="FilterSeoGroup__toggle-button buttonStyleDecorator buttonStyleDecorator_theme_ghostOrange buttonStyleDecorator_size_s Button" name="" type="submit" value="" tabindex="0" borderstyle="none"><span class="buttonStyleDecorator__text ">Показать все</span></button></div></div></div></div>'

        }
            $sql='SELECT * FROM monoblocks';
            $query=$pdo->prepare($sql);
            $result=$query->execute();
            
            while ($example=$result->fetch(PDO::FETCH_ASSOC))
            {
                $return['querycontent']='<div style="width: 100%; border: 2px solid red"></div>';
            };
            
            $sqlcountrecords = 'SELECT COUNT(*) as count FROM monoblocks';
            $querycountrecords=$pdo->prepare($sqlcountrecords);
            $querycountrecords->execute();
            $return['countrecords']=$querycountrecords->fetch(PDO::FETCH_ASSOC)['count'];
        
        //Return json encoded results
        return json_encode($return);
    }

}

$ajaxValidate = new ajaxValidate;
echo $ajaxValidate->formValidate();
?>
                

В результате после перехода по ссылке Ноутбуки и компьютеры -> Моноблоки вместо отображения правого бокового меню и центральной части возникает ошибка

<br />

Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php:48 Stack trace: #0 C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php(66): ajaxValidate->formValidate() #1 {main} thrown in C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php on line 48

(строка while ($example=$result->fetch(PDO::FETCH_ASSOC)))

Но на https://www.php.net/manual/ru/pdostatement.fetch.php написано, что использование fetch в виде $example=$result->fetch(PDO::FETCH_ASSOC) допустимо

введите сюда описание изображения

Подскажите как устранить ошибку использования fetch.


Ответы (0 шт):