NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Diskuze: devbook mvc - práce s db

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
kxmx
Tvůrce
Avatar
kxmx:9.12.2013 10:14

Ahoj pokračuju dál na devbook mvc, ale asi jsem úplně nepochopil jak se dotazovat na databazi skrze ten wrapper.

Sekce chci vést ve vztahu 1:m takže u článku jen vedu id sekce.

v phpmyadminu naprosto v pořádku funguje tento jednoduchý dotaz

SELECT clanky.titulek, sekce.nazev
FROM clanky
INNER JOIN sekce ON ( sekce.sekce_id = clanky.sekce )
WHERE sekce.url = 'ceske-hry'

který vrátí

titulek nazev
Bakterie České hry
Cheese Mouse České hry
Pacman111 České hry

ovšem na webu to tak nefunguje

url: /sekce/ceske-hry

class SekceKontroler extends Kontroler {

public function zpracuj($parametry) {
$mc = new ManazerClanku();
var_dump($mc->vratClankySek­ce($parametry[0]));
}

}

public function vratClankySek­ce($url) {
return DB::dotazVsechny("SE­LECT clanky.titulek, sekce.nazev
FROM clanky
INNER JOIN sekce ON (sekce.sekce_id = clanky.sekce)
WHERE sekce.url = ?",array($url));
}

výsledek

array(3) { [0]=> array(4) { ["titulek"]=> string(8) "Bakterie" [0]=> string(8) "Bakterie" ["nazev"]=> string(11) "České hry" [1]=> string(11) "České hry" } [1]=> array(4) { ["titulek"]=> string(12) "Cheese Mouse" [0]=> string(12) "Cheese Mouse" ["nazev"]=> string(11) "České hry" [1]=> string(11) "České hry" } [2]=> array(4) { ["titulek"]=> string(9) "Pacman111" [0]=> string(9) "Pacman111" ["nazev"]=> string(11) "České hry" [1]=> string(11) "České hry" } }

sice zpět přijdou 3 řádky ovšem atributy jsou uvnitř 2x jednou s číselným indexem a podruhé správě. předem děkuji za rady

 
Odpovědět
9.12.2013 10:14
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na kxmx
David Hartinger:9.12.2013 10:19

To je správně, abys mohl přistupovat k výsledkům jak pomocí indexu sloupce, tak pomocí jeho názvu.

Nahoru Odpovědět
9.12.2013 10:19
New kid back on the block with a R.I.P
Avatar
kxmx
Tvůrce
Avatar
kxmx:9.12.2013 10:29

ahaa tak to se omlouvám, nevim jestli se zbláznil apache nebo jsem to neuložil nebo neaktualizoval, ale furt mi to psalo, že nemám definovaný index "titulek" jediný výstup, který jsem byl schopný získat byl přes var_dump
tak to asi můžeš smazat, už mi to jde a nikomu dalšímu to asi nepomůže

 
Nahoru Odpovědět
9.12.2013 10:29
Avatar
kxmx
Tvůrce
Avatar
kxmx:9.12.2013 11:06

Tak mam ještě jeden dotaz. Jak se pracuje s wrapperem když mám 2 parametry v dotazu

např zde bych potřeboval zadat si nazev atributu a podminku

public function vratAtribut($a­tribut,$podmin­ka) {
return DB::dotazSamot­ny("SELECT $atribut FROM sekce WHERE url = $podminka");
}

 
Nahoru Odpovědět
9.12.2013 11:06
Avatar
Kit
Tvůrce
Avatar
Odpovídá na kxmx
Kit:9.12.2013 11:11
return DB::dotazSamotny("SELECT $atribut FROM sekce WHERE $podminka");

Fuj, zase jsem napsal statiku tam, kam nepatří :)

Nahoru Odpovědět
9.12.2013 11:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
kxmx
Tvůrce
Avatar
kxmx:9.12.2013 12:02

okay jen mi nebylo jasný jestli se to nedá psát obdobně jako při použití jednoho parametru

např.

public function vratAtribut($url) {
        return DB::dotazSamotny("SELECT nazev FROM `sekce` WHERE url = ?", array($url));
    }
 
Nahoru Odpovědět
9.12.2013 12:02
Avatar
Kit
Tvůrce
Avatar
Odpovídá na kxmx
Kit:9.12.2013 12:11

Copak mohu tušit, co máš v $podminka? Uživatelský vstup určitě ne, viď? Když vidím proměnnou $podminka, očekávám v ní nějaký booleovský výraz, třeba "url = ?"

Nahoru Odpovědět
9.12.2013 12:11
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 7 zpráv z 7.