LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (47) - Exportujeme data

Vytáhneme data ... a co dál? MySQL, PHP a export.

17.9.2004 15:00 | Petr Zajíc | Články autora | přečteno 32907×

Komerční sdělení: Pořádáme Kurzy PHP

V předchozím díle jsme rozebírali možnosti importu dat do MySQL databáze. Dnes se podíváme na opačnou úlohu - jak data z MySQL pomocí PHP exportovat.

SELECT ... INTO OUTFILE

Minule jsme rozebírali příkaz LOAD DATA INFILE. Jeho opakem je rozšíření příkazu SELECT o klauzuli INTO OUTFILE. Jak asi tušíte, má to za následek, že data se z databáze nevrátí ve formě sady záznamů, ale jako soubor. Mohlo by se zdát, že následující kus kódu všechny problémy s exportem dat z MySQL vyřeší:

<?
  
// zde je include souboru s konstantami
  
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
  
mysql_select_db(SQL_DBNAME);
  
$soubor=$_SERVER["DOCUMENT_ROOT"]."/data.txt";
  
mysql_unbuffered_query ("SELECT * FROM psc WHERE psc=47001 INTO OUTFILE '".$soubor."'");    
?>

Bohužel to má některá vážná úskalí. Jedná se zejména o to, že:

  • SELECT ... INTO OUTFILE se nikdy nepokusí odstranit existující soubor. Museli bychom to provést ručně před započetím exportu.
  • Tento příkaz vytváří soubor na stroji, na němž běží MySQL. Pokud PHP běží jinde než MySQL, je nám to k celkem k ničemu. Málokdy totiž v takovém případě budeme mít ke vzdálenému stroji přístup.
  • Na provedení tohoto příkazu musíte mít na serveru MySQL dostatečná práva - to asi nebude vždy.
  • Konečně, vzniklý soubor je přístupný pro zápis všem uživatelským účtům na serveru, na němž MySQL běží.

"Ruční" způsob

Naštěstí je řešení výše uvedených problémů poměrně jednoduché. Nic nám nebrání vytvořit si sadu záznamů, procházet ji a cílový soubor si sestavit takový, jaký chceme (a tam, kde to chceme). Náš příklad bychom za tímto účelem mohli poupravit následovně:

<?
  
// zde je include souboru s konstantami
  
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
  
mysql_select_db(SQL_DBNAME);
  
$vysledek = mysql_query ("SELECT * FROM psc WHERE psc=47001");
  while (
$zaznam=MySQL_Fetch_Array($vysledek)):
    
$obsah .= $zaznam["obec"];
    
$obsah .= "\t";
    
$obsah .= $zaznam["psc"];
    
$obsah .= "\n";    
  endwhile;
  
$soubor=fopen("data.txt", "w");
  
fwrite($soubor,$obsah);
  
fclose($soubor);
?>

Všimněte si, že tohle už nám dává trochu větší svobodu. Můžeme si určit oddělovač polí (třeba tabelátor), oddělovač řádků a můžeme soubor zapsat na libovolné místo. Nevýhodou je, že to je citelně pomalejší než SELECT ... INTO OUTFILE.

Výstupní formáty

Nikdo samozřejmě netvrdí, že jedinou možností výstupu dat z MySQL pomocí PHP jsou textové soubory. Můžeme exportovat prakticky do libovolného otevřeného formátu, protože PHP umí data zapisovat textově i binárně. Většinou už dokonce existují připravené nástroje, které můžeme použít. Tak například na internetu existuje celá řada návodů na přímý export z MySQL do XML. Můžete si je přizpůsobit, nebo můžete napsat sami něco v tomto duchu:

<?
  
// zde je include souboru s konstantami
  
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
  
mysql_select_db(SQL_DBNAME);
  
$vysledek = mysql_query ("SELECT * FROM psc WHERE psc=47001");
  
header("Content-Type: text/xml");
  echo(
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
  echo(
"<obce>\n");
  while (
$row = mysql_fetch_assoc ($vysledek))
  {
    echo (
"\t<obec>\n");
    echo (
"\t\t<psc>\n");
    echo
"\t\t\t".$row["psc"]."\n";
    echo (
"\t\t</psc>\n");
    echo (
"\t\t<nazev>\n");
    echo
"\t\t\t".$row["obec"]."\n";
    echo (
"\t\t</nazev>\n");
    echo (
"\t</obec>\n");
  }
  echo(
"</obce>\n");
?>

Spustit skript

Pokud nevíte, co je to XML, nemusíte se děsit. Ještě o něm bude v našem seriálu řeč.

Pozn.: Pokud naopak víte co je XML, rovněž se nemusíte děsit. Takhle se v PHP s XML opravdu nepracuje, ale chtěl jsem, aby to bylo názorné.

Možnosti PHP tímto nekončí. Používám s úspěchem například třídu pro přímou tvorbu souborů xls. Rovněž je možné vytvářet dokumenty v mnoha dalších formátech. Těším se, že někdo napíše PHP program pro generování sešitu Open Office (tedy formát sxw), zatím jsem nic použitelného nenašel. Kdybyste s tím měli zkušenosti, můžete se o ně s námi podělit v diskusi.

Verze pro tisk

pridej.cz

 

DISKUZE

PHP DocWriter 18.9.2004 11:55 Ján Sokoly
L Re: PHP DocWriter 18.9.2004 12:01 Petr Zajíc
Problem s exportem 25.10.2006 11:19 Petr.S
  L Re: Problem s exportem 25.10.2006 15:50 Petr Zajíc




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

27.8.2016 8:55 /Delujek
Dnes po 4 letech komunitního vývoje vyšla diaspora 0.6.0.0
diaspora* je open-source, distribuovaná sociální síť s důrazem na soukromý
Více v oficiálním blog-postu
Přidat komentář

24.8.2016 6:44 /Ondřej Čečák
Poslední týden CFP LinuxDays 2016; pokud byste rádi přednášeli na LinuxDays 2016 8. a 9. října v Praze, můžete svůj příspěvek přihlásit, následovat bude veřejné hlasování.
Přidat komentář

9.8.2016 22:56 /Petr Ježek
Zařazení souborového systému reiser4 do jádra 4.7 znamená konečně konec patchování jádra jen kvůli možnosti použít reiser4.
Přidat komentář

12.7.2016 13:14 /František Kučera
Spolek OpenAlt zve na 130. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 21. července od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

11.7.2016 16:53 /Redakce Linuxsoft.cz
Konference LinuxDays hledá přednášející. Přihlášky poběží do konce prázdnin, v září bude hlasování a program. Více na https://www.linuxdays.cz/2016/cfp/.
Přidat komentář

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

19.9.2016 21:04 / Marek Schoř
Poděkování

1.9.2016 13:07 / Walker
hardwood floor refinishing

12.8.2016 11:51 / Josef Zapletal
Jak udělat HTML/Javascript swiping gallery do mobilu?

8.8.2016 14:58 / Adams
fairies for hire

28.7.2016 15:51 / pepan
Re: NetBeans vs Eclipse

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze