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

> Perl (80) - Databáze - závěrečné poznámky

Perl Uvedeme několik poznámek o dalších možnostech při práci s databázemi a o tom, co by mohlo působit problémy a je na to třeba dávat pozor.

1.6.2009 01:00 | Jiří Václavík | Články autora | přečteno 9221×

Rychlý výpis výsledků pro účely ladění

Pokud potřebujeme výsledky SELECT dotazu pouze zobrazit, aniž bychom je chtěli dále upravovat, je zde k dispozici metoda dump_results. Užívá se zejména pro testování dotazů.

Po jejím zavolání jsou vypsána na určený výstup získaná data v nějakém daném formátu. Volání metody dump_results vypadá následovně.

$pocet_radku = $dbh->dump_results($max_delka_hodnoty, $oddelovac_radku, $oddelovac_hodnot, $ovladac);

Žádný parametr však není povinný.

Ve zdrojovém kódu pak pro výpis stačí uvést například toto.

my $sth = $dbh->prepare("SELECT * FROM tabulka");
$sth->execute();
my $rows = $sth->dump_results(15, "\n", "\t");

Problémy s uvozením v dotazech

Nyní narážíme na potenciální problém, který nastane v okamžiku, kdy do podmínky dotazu budeme chtít zahrnout řetězec. Pro začátek se podívejme na tento řádek.

my $sth = $dbh->prepare("SELECT * FROM tabulka WHERE description='$popis'");

Zde musíme opravdu vědět, co za dotaz to vlastně databázi posíláme. Co když se uvnitř proměnné zahrnuté do dotazu vyskytuje nějaký apostrof? Co když v $popis bude například hodnota získaná z formuláře na webu od nějakého návštěvníka a bude mít hodnotu"neco' or vyhra='ano"? Proti takovému obsahu je nutno se bránit.

V proměnné v dotazu může být obecně cokoliv a proto knihovna DBI pro ošetření nebezpečných dat nabízí vlastní metodu. Metoda quote nahradí v zadaném řetězci podle kritérií použitého databázového systému citlivé znaky escape sekvencemi. Problém tedy vyřešíme, když kód přepíšeme do nové podoby.

my $quoted = $dbh->quote($popis);
my $sth = $dbh->prepare("SELECT * FROM tabulka WHERE description=$quoted");

Metadata

DBI nabízí několik metod pro získávání dat, která popisují jiná data. V našem případě jde například o informace o tabulkách, sloupcích, klíčích apod.

Jen pro představu uveďme, jak se s takovými metodami pracuje. Ukážeme si metodu table, která po zavolání nad ovladačem databáze vrací tabulky v ní obsažené.

print "Tabulka: $_\n" for $dbh->tables;

Detailnější informace o tabulkách nabízí metoda table_info. Existují i další podobné metody s názvem většinou končícím na _info. Více informací lze nalézt v dokumentaci.

Trasování

Pokud nám něco dělá při práci s databází neplechu a potřebujeme to vypátrat, může pomoci trasovací režim. Pomocí něj můžeme sledovat všechny operace provedené s DBI.

Trasovací režim se zapíná metodou trace nad ovladačem databáze nebo jiným objektem. Jako argument tato metoda přijímá trasovací mód (0 vypíná trasování, nebo 1-5 pro rozsah zobrazovaných informací vzestupně) a jméno souboru, kam se trasovací informace budou zapisovat.

$dbh->trace(2, "dbitrace.log");

Většina řádků v dbitrace.log začíná šipkou. Směr -> označuje to, co bylo metodám předáno, opačná znázorňuje to, co jimi bylo vráceno.

Přidávání záznamů

Použití prepare a execute je výhodné také při mnohanásobném volání příkazu INSERT. Jako příklad si můžeme uvést konverzi dat ze zdroje do následující tabulky.

create table tabulka (
    id serial primary key,
    sloupec1 varchar(255),
    sloupec2 varchar(255),
    sloupec3 varchar(255)
);

Ve zdroji budou řádky ve formátu

sloupec1:sloupec2:sloupec3

A následující program naplní tabulku daty ze zdroje. Nejdříve příkazem split rozdělíme řádek na jednotlivé hodnoty a výsledný seznam předáme metodě execute.

$sth = $dbh->prepare("INSERT INTO tabulka (sloupec1, sloupec2, sloupec3) VALUES (?, ?, ?)");
while(<DATA>){
    chomp;
    $sth->execute(split /:/);
}

Podpora transakcí

DBI podporuje transakční zpracování dotazů. Podmínkou k tomu samozřejmě je, aby transakce podporoval i databázový systém (to znamená, že funkčnost závisí na ovladači). Problémy tak mohou nastat například u starších verzí MySQL.

Jsou dvě možnosti jak aktivovat transakční zpracování. Buď vypnout atribut AutoCommit nebo zavolat metodu begin_work.

$dbh->begin_work;

Dále můžeme například vkládat záznamy a kontrolovat, zda všechny dopadly v pořádku. Pokud jsme nakonec spokojeni s výsledkem, transakci potvrdíme a všechny změny se tak promítnou. Potvrzení provedeme metodou commit a v případě neúspěchu akce odvoláme pomocí rollback. Obě metody jsou volány nad ovladačem databáze, nikoliv dotazu.

Správnost všech dotazů ověříme podmínkou, která bude logickou spojkou AND spojovat všechna volání metody execute. V případě, že nenulový počet volání selže (to jest selže alespoň jedno), podmínka bude mít hodnotu false. Toto lze provést například tímto způsobem.

my $commit = 1;
while(<DATA>){
    chomp;
    $commit &&= $sth->execute(split /:/);
}

if($commit){
    $dbh->commit;
}else{
    $dbh->rollback;
}

DBI shell

Jako zajímavost na závěr stojí za zmínku databázový klient DBI::shell (příkaz dbish), který pracuje s databázemi stejně jako DBI. Více informací o něm je v dokumentaci.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



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

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

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

> Poslední diskuze

5.12.2017 11:50 / Thomas
kitchen renovations

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

Více ...

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