Diskuze: Absolutně nepochopitelná věc v PDO

PHP PHP Absolutně nepochopitelná věc v PDO American English version English version

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Čest lidi. Je to asi tak den, co mě zdejší komunita ukamenovala za to, že ještě používám MySQL v PHP ... Začal jsem teda používat PDO, nebo respektive jsem se ho začal učit a už jsem narazil na první problém. Vůbec nechápu, proč se to děje. Píše mi to error line 28 ($vysledek = $pdo->fetch(PDO::FET­CH_ASSOC);) no a já nevím, co tam je špatně. Opravdu jsem procházel pomalu znak po znaku a nic jsem nenašel :D

Celý kód:

<?php
        //Pripojeni do databaze

        $pdo = new PDO('mysql:host=localhost;dbname=stranky', 'root', '');

        if($pdo)
        {
            echo("Připojeno <br>");

            $fetch = $pdo->prepare("SELECT * FROM news");
            $fetch->execute();

            print("Zkouška funkce PDO::FETCH_ASSOC<br>");
            print("Return next row as an array indexed by column name\n");

            $vysledek = $pdo->fetch(PDO::FETCH_ASSOC);

        }
        else
        {
            echo("Nepřipojeno");
        }
//------------------------//
        //Vybirani dat




        ?>
Odpovědět  ±0 1.1.2014 17:13
To co se zdá být nemožné, je vždy možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Tak zaprvé: Ty sprosté pozdravy si nech od cesty. Nejsem na to zvědavý.

$vysledek = $fetch->fetch(PDO::FETCH_ASSOC);

Doporučuji však změnit jméno proměnné $fetch za něco vhodnějšího.

Nahoru Odpovědět 1.1.2014 17:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

Omlouvám se, nevěděl jsem, že si to vezmete tak k srdci. Děkuju za pomoc

Nahoru Odpovědět 1.1.2014 17:24
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

Ještě by jsem se chtěl zeptat. Kdyby jsem chtěl, aby se mi vypsaly všechny články z databáze... Jak by jsem to měl udělat ? Řekněme, že každý článek by měl ID, které by mělo nastaveno AUTO_INCREMENT. Vím, že musím použít vyklus while(). Jenže jakou dát podmínku ?

Nahoru Odpovědět 1.1.2014 17:31
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Michal Maršálek:

Doufám, žes to s tím while nemyslel, že na každý článek použiješ samostatný dotaz! Prečti si seriál o SQL a PDO.

Editováno 1.1.2014 17:40
 
Nahoru Odpovědět 1.1.2014 17:37
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Michal Maršálek
Jan Demel:

Ne tak jsem to opravdu nemyslel. Myslel jsem to tak, že použiju jeden cyklus na jeden table.

Nahoru Odpovědět 1.1.2014 17:43
To co se zdá být nemožné, je vždy možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:
while ($vysledek = $fetch->fetch(PDO::FETCH_ASSOC)) {
    echo $vysledek['ID'];
}

ale dá se to udělat i přes iterátor

foreach ($dotaz->fetchAll(PDO::FETCH_ASSOC) as $vysledek) {
    echo $vysledek['ID'] . "\n";
}

nebo také jedním vrzem

echo implode("\n", $dotaz->fetchAll(PDO::FETCH_COLUMN));
Nahoru Odpovědět 1.1.2014 17:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Demel
Redaktor
Avatar
Nahoru Odpovědět 1.1.2014 17:52
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

Kolikrát žasnu, jak je řešení primitivní a já v něm hledám něco těžkého -_-

Nahoru Odpovědět 1.1.2014 17:52
To co se zdá být nemožné, je vždy možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Tahle "primitivní" řešení umí až PDO. Ten starý ovladač to neuměl.

PDO umí i výsledek SQL dotazu nacpat do objektu. Práce s ním je pak velmi jednoduchá, zpravidla stačí jen echo $objekt.

Editováno 1.1.2014 17:56
Nahoru Odpovědět 1.1.2014 17:54
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 10 zpráv z 10.