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

> MySQL (69) - Prepared Statements

Prepared statemets alebo pripravené výrazy - čo vlastne sú, s čím nám pomáhajú a prečo ich používať? Odpoveď nájdete v tomto článku.

9.3.2011 00:00 | Marek Beleščiak | Články autora | přečteno 10594×

Prepared statemets alebo pripravené výrazy - čo vlastne sú, s čím nám pomáhajú a prečo ich používať? Odpoveď nájdete v tomto článku.

MySQL má ešte jednu schopnosť, o ktorej ste možno nevedeli. Tou schopnosťou sú pripravené výrazy (prepared statements). Statementy sú spôsob ako efektívnejšie a bezpečnejšie dotazovať databázu. Uveďme si teda malý príklad:

SELECT * FROM `Article` WHERE `id` = ?

Otáznik vo výraze zastupuje hodnotu ktorá sa naňho "lepí" a otáznik sa zmení na onú hodnotu. Znie to trochu zložito a aby som bol presný, ako to celé funguje uvediem kompletný príklad:

mysql> PREPARE my_stmt FROM "SELECT nickname FROM account WHERE id = ?"; Query OK, 0 rows affected (0,00 sec) Statement prepared mysql> SET @id = '17'; Query OK, 0 rows affected (0,00 sec) mysql> EXECUTE my_stmt USING @id; +----------+ | nickname | +----------+ | Tester | +----------+ 1 row in set (0,02 sec) mysql> SET @id = '18'; Query OK, 0 rows affected (0,00 sec) mysql> EXECUTE my_stmt USING @id; +----------+ | nickname | +----------+ | Tester2 | +----------+ 1 row in set (0,00 sec) mysql> DEALLOCATE PREPARE my_stmt; Query OK, 0 rows affected (0,00 sec)
Statement pripravíme nasledovane:
  1. Spustíme príkaz PREPARE, za ktorým nasleduje meno nového statementu, za ním ďalej nasleduje FROM a za ním nakoniec dané query uzavreté v úvodzovkách s otáznikmi namiesto hodnôt - pamätajte, že otázniky nikdy nedávame do úvodzoviek alebo apostrofov.
  2. Ďalej nasleduje lepenie hodnôt. Definícia je vlastne nastavenie premennej. Za každý otáznik jedna definícia, takže si dajte bacha, nech otáznikov není viac ako definícií alebo naopak definícií viac ako otáznikov. Definujeme ju príkazom SET @meno = "HODNOTA";.
  3. Keď už máme daný výraz pripravený, hodnoty máme priradené, spustíme ho príkazom: EXECUTE, za ktorým nasleduje meno nášho statementu, následne USING a naše na-definované premenné oddelené čiarkou (@param1, @param2, ...).
  4. A nakoniec, keď už daný pripravený výraz nebudeme ďalej potrebovať, jednoducho ho uvoľníme, a to príkazom DEALLOCATE PREPARE, za ktorým nasleduje meno nášho statementu.

Statementy sú rýchlejšie ako normálne query, pretože každé query musí prejsť parsovaním, zatiaľ, čo statement prejde iba raz, a to, keď ho vytvoríte, potom už len naňho "lepíte" iné hodnoty. Najviac pocítite rýchlostný rozdiel pri nahadzovaní záloh alebo pri opakovaní jedného príkazu dokola napr. INSERT. Je to taktiež bezpochyby bezpečnejší spôsob, pretože rozdeľuje logiku od dát a tak pomáha predísť veľmi známemu útoku SQL Injection. Za normálnych okolností musíte byť veľmi opatrní, keď vkladáte do dotazu pre MySQL vstupné dáta od užívateľa. Pri pripravených výrazoch vám stačí escapnuť zopár problémových znakov ako sú napr. úvodzovky, apostrof, spätné lomítko alebo ASCII nula.

Ešte je jedno riešenie, kde môžeme nabrať na rýchlosti, a ním je nový binárny protokol, ktorý môže používať prepared statementy. Pretože v normálnom protokole mysql aj klient vždy zmenía všetky dáta na reťazce, ktoré sú vo väčšine prípadov väčšie ako originálne dáta, a až na servery sa zmenia na správny typ. Binárny protokol tieto dáta nijako neprekladá a posiela ich v originálnej forme, čo je samozrejme výhodné, pretože to znižuje zátaž procesora a taktiež zaťaženie siete.

Aj napriek týmto všetkým výhodám, sa statementy nie vždy oplatí používať, a totiž ani na všetko ich nejde používať. Kompletný zoznam podporovaných funkcii pripravených statementov pre MySQL (5.5) je tu. Ďalší dôvod, prečo ich nepoužívať je fakt, že niekedy sú pomalšie ako normálne regulárne dotazy - a to väčšinou keď sa daný výraz spustí iba raz, ale stále tu máte výhodu v bezpečnosti, takže nechám na vás kedy použiť a naopak nepoužiť Prepared Statementy.

Pokiaľ ste niekedy robili s MySQL nemal by byť pre vás problém vytvoriť program, ktorý beží na tejto báze, pokiaľ nie, väčšina jazykov už túto podporu má, alebo ju bude mať v blízkom čase. Ako príklad uvediem napr. mysqli rozšírenie pre PHP.

Záverom si myslím, že ste nadobudli dostatočne informácií o pripravených výrazoch, a viete o ich výhodách i nevýhodách. Môžu byť naozaj kľúčom k rýchlosti, výkonu a bezpečnosti, ak sú dobré použíté.

Verze pro tisk

pridej.cz

 

DISKUZE

Rychlost 13.3.2011 17:06 Aleš Hakl




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

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

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

> Poslední diskuze

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

Více ...

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