Diskuze: Jak vytáhnout pole dat z databáze přes PDO?

PHP PHP Jak vytáhnout pole dat z databáze přes PDO? American English version English version

Avatar
edhel
Člen
Avatar
edhel:

Ahojte, začínám a zápasím s PDO a dostal jsem do fáze, se kterou potřebuji poradit. (Snažil jsem se postupovat podle zdejších seriálů, ale vždycky se dostanu ze stavu "chápe" do stavu "tupě přepisuje".)
Mám v MySQL tabulce obsah stránek (adresu, název, obsah...) a nedaří se mi je vytáhnout do šablony pro stránku tak, jak bych chtěl. Tu jsou tři funkce ze třídy "db", které k tomu používám:

        private static function dotazStranka($sql, $parametry = array()){
                $dotaz = self::$spojeni->prepare($sql);
                $dotaz->execute($parametry);
                return $dotaz->fetch(PDO::FETCH_ASSOC);
        }

        public function nactiStranku()
        {
                $vysledek = self::dotazStranka("
                SELECT `url_eng`, `menu_eng`, `data_eng`
                FROM `pages`
                WHERE url_eng='presentation'
                ");
                return $vysledek;
        }

        public function prezvykejStranku()
        {
                $vypln = $this->nactiStranku();
/*              echo ('<h1>Titulek: ' . $vypln['menu_eng']);
                echo ($vypln['data_eng']);
                echo ('<p>Cesta sem: eng/' . $vypln['url_eng']); */
        }

Rád bych data z ní vytažená dostal do šablony stranka.php, kterou bych rád měl velice pěknou a přehlednou podobně jako v seriálu o MVC. Tedy něco takového:

<?php
$obsah = new db();
$obsah->nactiStranku();
$obsah->prezvykejStranku();
?>
<h1>Titulek: <?= $obsah['menu_eng'] ?></h1>...

Ale háže to chybovou hlášku "Cannot use object of type db as array". Můžete mi tedy někdo, prosím, poradit, jak to zařídit, aby se objektu typu db stalo pole, ze kterého můžu pohodlně tahat potřebná data? Dopředu díky.
P.S.: Okomentovaná část ve funkci prezvykejStranku po odkomentování potřebná data vypisujesprávně, ale mám pocit, že to není dobré řešení.

 
Odpovědět  -1 17.1.2014 15:23
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na edhel
Petr Nymsa:

jelikož na objektu $obsah, který by se správně měl jmenovat například instanceDatabáze (zkráceně např. db) voláš sice metody kteér ti mají vrátit výsledek z DB ale nikam je neukládáš. Tj

$db = new db();
$data = $db->nactiStranku();

....
<h1>Titulek: <?= $data['menu_eng'] ?></h1>

Každopádně celá třída DB by šla napsat lépe, podívej se na zdejší tutoriály o PHP

Editováno 17.1.2014 15:37
Nahoru Odpovědět 17.1.2014 15:35
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
edhel
Člen
Avatar
Odpovídá na Petr Nymsa
edhel:

Aha, a já pořád hledal nějaké chyby v té funkci:) Díky moc, tak už se zase můžu hnout z místa.
Samozřejmě, celá třída a mnoho z mého kódu by šlo napsat lépe a pořád na něm dělám. Tohle je rozpracovaná verze někde uprostřed dotazu, doufám, že na konci to bude vypadat mnohem pěkněji.

 
Nahoru Odpovědět 17.1.2014 16:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.