Как mysql оставил переменную соединения и эха в цикле foreach - PullRequest
0 голосов
/ 05 марта 2019

друзей я пытаюсь MySQL оставить запрос на соединение на стороне PHP, и мне нужно немного помочь.Я не могу запросить как объект php, если я запрашиваю объект, запрос был пустым: $ data = $ Categories-> fetchAll (PDO :: FETCH_OBJ);

Как я могу запросить как объект php?

<?php
$categories = $vt->prepare("SELECT t1.baslik AS lev1, t2.baslik as lev2, t3.baslik as lev3, t4.baslik as lev4
FROM menuler AS t1
LEFT JOIN menuler AS t2 ON t2.katID = t1.id
LEFT JOIN menuler AS t3 ON t3.katID = t2.id
LEFT JOIN menuler AS t4 ON t4.katID = t3.id WHERE t1.katID=?");

foreach ($listeSonuc as $listele) {
    # code...
 }

$categories->execute(array($listele->katID));
$data=$categories->fetchAll(PDO::FETCH_ASSOC);
$categoriesResult = array_map(function($item){
    return (object)array_combine(['lev1', 'lev2', 'lev3', 'lev4'], $item);
},$data);

// code begins here
$newData = [];
foreach ($categoriesResult as $row) {
    $tree = get_object_vars($row);
    do {
        $title = array_pop($tree);
    } while($title === null);
    $catTree = implode(' > ', $tree);
    $newData[] = (object)[
        'title' => $title,
        'tree'  => $catTree
    ];
}?>
<div class="table">
        <div>
            <div class="th">Başlık</div>
            <div class="th kucukteldegizle">Bölüm</div>
            <div class="th kucukteldegizle">Özellik</div>
            <div class="th kucukteldegizle">Yayınla?</div>
            <div class="th text-right">İşlem</div>              
        </div>

<?php foreach ($newData as $row) {?>
        <div class="cizgili">
            <div class='bosluk'><?php echo $row->title?></div>
            <div class="kucukteldegizle"><?php echo $row->tree?></div>
            <div class="kucukteldegizle">???</div>
            <div class="kucukteldegizle">???</div>
            <div>???</div>
        </div>
<?php }?>
</div>

Ответы [ 5 ]

0 голосов
/ 09 марта 2019

Наконец, я исправил это другим способом:

В разделе SQL я создал функцию:

    BEGIN
        DECLARE res TEXT;
        CALL catpath(cat_id, res);
        RETURN res;
    END
   

Затем я создал процедуру:

    BEGIN
        DECLARE catname VARCHAR(300);
        DECLARE temppath TEXT;
        DECLARE tempparent INT;
        SET max_sp_recursion_depth = 255;
        SELECT baslik, katID FROM categories WHERE id=cat_id INTO catname,        tempparent;
        IF tempparent IS NULL
        THEN
            SET path = catname;
        ELSE
            CALL catpath(tempparent, temppath);
            SET path = CONCAT(temppath, '/', catname);
        END IF;
    END
    

Затемя называю свои php коды:

   <?php
     $sql = $vt->prepare ("SELECT id, baslik, catpath(id) AS path FROM menuler WHERE id = '$kayitListesi->id' ");
     $sql ->execute(array());
     $sqlsonuc=$sql->fetchAll(PDO::FETCH_OBJ);
        //print_r($sqlsonuc);
         foreach($sqlsonuc as $kategoriagaci){
             echo $kategoriagaci->path;
         }
     ?>

Тогда я получаю дерево категорий:

Electronics/Computers/Desktop Computers/Asus Desktop I7

Надеюсь, поможет кому-нибудь

0 голосов
/ 05 марта 2019
$newData = [];
foreach ($categoriesResult as $row) {
    $tree = get_object_vars($row);
    do {
        $title = array_pop($tree);
    } while($title === null);
    $catTree = implode(' > ', $tree);
    $newData[] = (object)[
        'title' => $title,
        'tree'  => $catTree
    ];
}

$newData теперь будет выглядеть так:

array (
  0 => 
  stdClass::__set_state(array(
     'title' => 'Sony 72 Ekran Led Television',
     'tree' => 'All Televisions > Led Televisions > Sony Led Televisions',
  )),
  1 => 
  stdClass::__set_state(array(
     'title' => 'Samsung 142" Lcd Television',
     'tree' => 'All Televisions > Led Televisions > Samsung Lcd Televisions',
  )),
  2 => 
  stdClass::__set_state(array(
     'title' => 'Uhd Televisions',
     'tree' => 'All Televisions',
  )),
)

Демонстрация: https://rextester.com/IOCYY93067

, представляющая собой массив stdClass объектов с атрибутами title (первый столбец) и tree (второй столбец).

Теперь вам просто нужно отобразить его как таблицу HTML.

Вот пример того, как вы можете отобразить вывод:

echo '<table>';
echo '<tr>
    <th>TITLE</th>
    <th>CATEGORIE</th>
    <th>PROPERTIES</th>
    <th>POSTED?</th>
    <th><!-- edit/delete --></th>
</tr>';
foreach ($newData as $row) {
    echo '<tr>';
    echo "<td>{$row->title}</td>";
    echo "<td>{$row->tree}</td>";
    echo "<td>???</td>";
    echo "<td>???</td>";
    echo "<td>???</td>";
    echo '</tr>';
}
echo '</table>';

Демо: https://rextester.com/IRF19069

0 голосов
/ 05 марта 2019
$categoriesResult=$categories->fetchAll(PDO::FETCH_ASSOC);

foreach ($categoriesResult as $title => $value) {
    echo "$title = $value";
}
0 голосов
/ 05 марта 2019
foreach ($categoriesResult as $title) {                                
    echo $title->lev1;
    echo $title->lev2;
}

Так вы должны иметь доступ к своим значениям.Конечно, вы можете вставить HTML в свои операторы echo для форматирования результата.

0 голосов
/ 05 марта 2019
Флаг

FETCH_OBJ возвращает каждую строку как объект php.поэтому ваш код должен выглядеть следующим образом.

echo '<table>';
echo '<tr><th>lev1</th><th>lev2</th><th>lev3</th><th>lev4</th></tr>';
foreach ($categoriesResult as $titles) {
    echo "<tr><td>{$titles->lev1}</td><td>{$titles->lev2}</td><td>{$titles->lev3}</td><td>{$titles->lev4}</td></tr>";
}
echo '</table>';

это должно отображать ваш результат.

...