abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 4
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 26
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 789 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: PHP - jak uložit data z Mysql do pole

3.11.2014 17:39 HIH
PHP - jak uložit data z Mysql do pole
Přečteno: 352×
Ahoj, snažím se načíst z mysql data a vytvořit z nich rovnou pole.
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
V sql dotazu mám nastavenou jako první položku tabulku s názvem 'key'
$sql = "SELECT `key`, `t1`, `t2` FROM `table` WHERE `t1` = ?;";
a přesto se pole nevytvoří podle názvů klíčů z mysql ale vytvoří se tam číslování 0,1,2,3,4,5... Poradí někdo? Děkuji

Odpovědi

3.11.2014 19:15 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole

fetchAll() vrací řádky (číslované) a v každém řádku je pole.
Vrací to pole polí, nebo-li dvou rozměrné pole, přičemž první úroveň má číselné klíče, a druhá, v tomto případě, názvy sloupců.

1. řádek a sloupec 'key': echo $result[0]['key'];

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
3.11.2014 21:29 HIH
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
A jde nějak jednoduše zajistit, aby to vracela jen v jednorozměrném poli?
3.11.2014 21:29 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
A jak si to představuješ?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
3.11.2014 22:10 HIH
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
No abych nemusel při vypisování těch polí všude vkládat [0], dost to znepřehledňuje kód :-(

foreach($array as $key => $value){

echo $value[0]['key'];

}

Prostě jen takto
echo $value['key'];
3.11.2014 22:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole

Projdi to normálně pomocí fetch().

Jinak nerozumím řeči tvého kmene:

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $key => $value){
  echo "The 'key' value: " . $value['key'] . " of row: $key\n";
}

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
3.11.2014 23:05 HIH
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Mužeš mi s tím fetchem poradit? To fakt nedám :-(
Josef Kufner avatar 4.11.2014 01:06 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Umaž All a umaž [0].
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 4.11.2014 01:08 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
... a pak se podívej na toto a vše ostatní, co tam najdeš.
Hello world ! Segmentation fault (core dumped)
4.11.2014 18:58 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Z hlavy a bez ošetření:
$res = $db->prepare('SELECT * FROM table');
$res->execute();
while($row = $res->fetch(PDO::FETCH_ASSOC)){
  print_r($row);
}
Na menší data, třeba i:
$res = $db->prepare('SELECT * FROM table');
$res->execute();
foreach($res->fetchAll(PDO::FETCH_ASSOC) as $row){
  print_r($row);
}
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 4.11.2014 20:32 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
PDOStatement implementuje Traversable, takže není třeba fetchAll(), což ušetří kus paměti:
$res = $db->prepare('SELECT * FROM table');
$res->execute();
$res->setFetchMode(PDO::FETCH_ASSOC); // Toto může být nastaveno globálně.
foreach($res as $row){
  print_r($row);
}
Hello world ! Segmentation fault (core dumped)
4.11.2014 20:35 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Neušetří...
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 4.11.2014 20:41 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Ušetří, neboť nemusí natahovat do paměti všechny řádky výsledku najednou. Pokud použije nebuferované dotazy, nebude je mít v paměti ani v databázovém serveru.

Zkus si to na pár tisících záznamech (např. nějaký export) a uvidíš, jak je to znát.
Hello world ! Segmentation fault (core dumped)
4.11.2014 21:00 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Musel bys ty nebuferované dotazy nejprve aktivovat.

Kromě toho je evidentně chce nacucnout naráz do slovníku, ve kterém klíčem bude sloupec "key".
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 4.11.2014 21:15 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
I když dotaz buferovaný bude, pořád to znamená cca 50% úsporu paměti, kdy v PHP bude v paměti jen jeden řádek výsledku najednou (buffer je v databázi). To je hodně znát v případě, kdy má výsledek větší, než se vejde do limitu paměti nastaveném v PHP.
Hello world ! Segmentation fault (core dumped)
4.11.2014 21:18 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Myslím si, že do pár MB to není nutné řešit a výkonnější řešení bude bufferované.

Default je bufferování zapnuté.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 4.11.2014 21:50 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Zda je dotaz bufferovaný či nikoliv ovlivňuje chování databáze. Tedy toho, co je na druhé straně socketu než je PHP.

V případě bufferovaného dotazu si databáze připravý celý výsledek v paměti a aplikace dostane kurzor, kterým si po tom výsledku může běhat dle libosti.

V případě nebufferovaného dotazu je připraven jen aktuální řádek a kurzorem se dá hýbat jen dopředu. Další řádky jsou připravovány podle toho, jak si o ně aplikace říká.

Nemá to tedy žádný vliv na to, kolik si PHP script ukousne paměti.

Nebufferované dotazy je nutné použít, pokud jsou požadovány rozsáhlé výsledky. Například při zálohování nebo nějakých exportech. Tam bude i výkon vyšší, neboť se ušetří na alokaci velkého kusu paměti a nedojde k vypláchnutí diskové kaše.

Pokud aplikace žádá malé výsledky, což je obvyklý případ, je výhodnější naplnit buffer a uvolnit vše ostatní co nejdříve. Proto je bufferování defaultně zapnuto.

Na druhé straně socketu, v PHP, je tohle celé neviditelné. PHP si tahá řádek po řádku používajíc kurzor a je mu úplně jedno, zda to databáze už má nachystané nebo nikoliv. Rozdíl v použití fetch() či iterátoru oproti fetchAll() je v tom, kolik řádků bude mít PHP v paměti. Pokud použiješ fetch() či iterátor, proběhne zpracování s konstantním množstvím paměti. Ale pokud si napřed celý výsledek načteš pomocí fetchAll(), bude spotřeba paměti lineární s velikostí výsledku. Co se týče rychlosti, vyjde to skoro nastejno, komunikace s databází je totožná. Ušetří se pár volání funkce, ale na druhou stranu se bude více trápit cache mezi CPU a pamětí.
Hello world ! Segmentation fault (core dumped)
4.11.2014 21:54 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Takže pokud tazatel bude chtít z databáze vytáhnout desetiřádkové menu a v každém řádku bude 20 znaků, bude rozhodně rychlejší fetchAll(), než to iterovat po jednom.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
4.11.2014 21:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Už jsem to 300let nepoužil, ale předpokládám, že je to pohodlnější ekvivalent mého prvního zápis.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 4.11.2014 21:31 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Pokud by byl fetch() bez parametru, tak ano.
Hello world ! Segmentation fault (core dumped)
4.11.2014 21:34 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
Ten tvůj zápis je pohodlnější. Hlavně přitom nepotřebuješ používat ty připitomělé settery.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
3.11.2014 20:06 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
$result = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
Funguje to jen pro 2 sloupce.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 4.11.2014 21:30 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: PHP - jak uložit data z Mysql do pole
$sql = "SELECT `key`, `key`, `t1`, `t2` FROM `table` WHERE `t1` = ?;";
$q->fetchAll(\PDO::FETCH_ASSOC | \PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE)
Klíčem bude první sloupec a ten bude odebrán z pole, pokud ji tam chceš zdvoj ji.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.