Přeskočit na hlavní obsah

Příspěvky

Zobrazují se příspěvky z listopad, 2006

HTML Framework 1 - Select-option

Při programování v PHP se dostanete do fáze, kdy Vás přestane bavit znovu a znovu psát HTML kód pro formulářová políčka. Jedním ze způsobů jak si začít tvořit svou vlastní knihovnu takovýchto HTML komponent, je přejít na OOP kód a v závislosti na zkušennostech si předdefinovat to, co se často opakuje. Tím začnete tvořit svůj malý framework pro HTML výstup vašich webových aplikací.

Je jasné, že existuje spoustu hotových řešení, ale já jsem šel cestou (pro PHPčkáře osobitou) vlastní. Mou snahou je, se odprostit od psaní jakéhokoli HTML kódu při programování základních komponent. Při OOP návrhu tříd je dobré rozvrhnout, které třídy budou znovupoužitelné v jakékoli aplikaci a které nikoli. Jelikož se nyní bavím o HTML výstupu, který je pro PHP jako vzduch pro člověka, je jasné, že se jedná o třídy s vysokou znovupoužitelností.

Vytvořím si adresář /lib ve kterém budu mít třídy, které jsou znovupoužitelné v jakékoli webové aplikaci. Jelikož se jedná o HTML kód a formulářové políčko tak adresá…

Závažná chyba při tvorbě triggerů

Původně jsem chtěl napsat článek o triggerech a jejich využití.
Zjistil jsem ale nepříjemnou chybu, která bez jakýchkoli servítek smaže můj pracně vytvořený trigger, aniž by mi databáze cokoli zdělila.

Jedná se o bug 18153 a jeho duplikace 18816.

Tato nepříjemná chyba mi při provedení dotazu REPAIR/OPTIMIZE/ALTER smaže trigger z information_schema. Problém je o to horší, že použitý název je uložen v souboru *.TRN, který se pro změnu zachová! Takže nyní mám smazaný trigger a navíc nemůžu použít původní název triggeru. Jediné možné řešení je fyzicky smazat soubory *.TRN a vytvořit trigger znovu.

Opět uvedu malý příklad:

CREATE DATABASE stupidni_test;
CREATE TABLE tabulka (
id int NOT NULL auto_increment,
nazev varchar(10) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE tabulka_zaloha (
id int NOT NULL auto_increment,
nazev varchar(10) NOT NULL,
PRIMARY KEY(id)
);

A nyní si vytvořím trigger.

DELIMITER $$
/* tento prikaz muze vyhodit chybu, pokud trigger existuje, zde totiz existuje dalsi bug s…

MySQL 5.0 díl.2

Typ tabulky InnoDB zvládá i další vlastnost a tou je tzv. transakční zpracování. Ve chvíli, kdy Vaše aplikace bude používat akční dotazy nad důležitými daty, jistě budete hledat způsob, jak tyto data co nejlépe ošetřit.

K tomu dobře poslouží transakce. Setkal jsem se i s názory, kteří transakční zpracování odsuzují z toho či onoho důvodu. Já, jako člověk, který tyto věci využívá v praxi mohu jen podotknout, že je to pro mě určitá záchrana při práci s akčními dotazy.

Co to je, to transakční zpracování dat? Jedná se způsob, pomocí kterého mohu své předešlé kroky navrátit zpět nebo je potvrdit. Série příkazu UPDATE, DELETE, INSERT, které jsou spuštěny při transakčním zpracování, se provedou tehdy, když uznám, že po změně nedojde k znehodnocení dat. Fyzicky se dané akce provedou až po úspěšném ukončení, do té doby jsou dočasně uloženy jen jako série příkazů, které čekají na ukončení. To sebou přináší i tu vlastnost, že zpracování může být v polovině přerušeno (např. výpadkem proudu) a přest…

MySQL 5.0 díl.1

Od verze 5.0 je možné využívat nových vlastností, které nabízí skutečnou správu dat v databázi.

Jednotlivé vlastnosti rozepíši do vlastních dílů.

V prvním díle se budu věnovat referenčním integritám. Referenční integritu bylo možné využívat již dříve. Respektive od doby, kdy MySQL podporovala typ tabulky InnoDB.

Proč vůbec databáze používá tuto vlastnost? Pokud začnu pracovat s daty v databázi, zjistím, že některé se přímo vážou na jiné. Dříve se používal způsob uchování těchto vazeb v aplikační úrovni.
Nevýhody, které to sebou přinášelo je hned několik:

programátor musel stále mít v paměti, která data jsou propojena a podle toho provozoval akční dotazy
při změně aplikace nad databází se znovu musely tyto vazby naprogramovat
při provedení UPDATE se museli projít všechny vazby a upravit hodnoty
a tak dále...


Při použití referenčních integrit v MySQL tyto nepříjemnosti odpadnou.

Jak jsem již psal na začátku, pro využití referenčních integrit musíte použít takový typ tabulky, který danou vlastnos…

PHP 5.2

Tak nám vyšla nová verze PHP 5.2, která by měla vylepšit rychlost přímo v ZEND Engine.

Koukal jsem se na změny a je pravda, že pár věcí se zde pohlo k lepšímu. Otázkou však zůstává, zda se z toho paskvilu a neuspořádaného vývoje, v kterém se PHP ocitá dokáže ještě vymanit.

Microsoft sám začal mít o PHP zájem alespoň v podpoře .NET, ale jeden nikdy neví, kam to může zajít (InnoDB v MySQL vs. Oracle).
Jsou zde opravené některé věci, jako např. v abstraktní třídě nemůže existovat statická metoda, magická metoda __toString() nemůže vyhazovat výjimku apod.

Ale co mě stále štve na PHP je ta ignorace type hinting, s tím související přetěžování metod či konstruktorů, dále vyhazování výjimek z php funkcí namísto stupidního Boolean, nemožnost smysluplně vytvořit Singleton, apod.

Pokud se podívám na způsob práce s databází, je často zdůrazněna dobrá podpora MySQL, ale k čemu mi je taková vynikající podpora, když zde nemám pořádný nástroj na ORM, DAO, apod. (např. Hibernate v Jave). Je zde sice jakýsi…