První článek z tohoto blogu, který se lehce odkloní od klasických webových témat a bude se zabývat více technickými pojmy. Rád bych zde jednak prezentoval, co je vlastně na pozadí všech těch aplikací, jak některé věci fungují a zajímavé příklady, na které při práci narazím.

Jste-li ten, pro koho je programování a věci okolo něho něco téměř magického, můžete brát tyto články pouze jako důkaz, že to zase až takové kouzlení není. Také to můžete brát jako důkaz, že si na nic nehrajeme a to, o čem mluvíme a co slibujeme, když vám představujeme naše aplikace, skutečně dokážeme. Máte-li navíc firmu, ve které je zdatný programátor, může v této části blogu narazit na cenné informace, které mu mohou pomoci k řešení některých problémů, protože my programátoři nejraději žijeme právě z podobných příkladů.

PHP a MySQL

Nyní již k samotnému článku. PHP a MySQL dnes tvoří takovou symbiózu, že některé PHP vývojáře ani nenapadne možnost použít jiný databázový server. Pravdou je, že MySQL pro většinu webových aplikací představuje dostatečně robustní databázi, takže není nutné přemýšlet nad nějakou jinou. Nebudu se nyní zabývat, v čem je MySQL horší nebo lepší oproti jiným, ale pouze v průběhu čtení článku mějte v hlavě, že existují i jiné databáze a mohou být přínosné.

MySQL, MySQLi a PDO

Tyto tři vyjmenované pojmy představují nejrozšířenější způsoby, jak se PHP připojuje k MySQL databázi. Každý z nich nabízí různé možnosti, takže je nejdříve projdu, než se dostanu k závěru, který je lepší používat.

PHP rozšíření MySQL

Toto rozšíření patří historicky k nejstaršímu a zároveň co se funkcí týká také k nejchudšímu. Umožňuje v zásadě pouze nejnutnější operace s databází a mimo to od PHP verze 5.5.0 končí jeho podpora a bude z PHP jednoho krásného dne odstraněn.

MySQLi rozšíření

Rozšíření mysqli_* zaplňuje místo tam, kde standardní mysql_* nestačí, a do budoucna jej také plně nahradí. Mezi největší přínosy patří především možnost parametrizovaných dotazů, podpory OOP, transakcí, procedur a v neposlední řadě také přehlednější kód. Tohle vše jsou věci, které při přechodu oceníte nejvíce a budete přemýšlet, proč jste je nepoužívali již dříve a trápili se s mysql_*.

Pokud se dostaneme i k verzi MySQL, tak mysqli nabízí také funkce pro některé nové prvky MySQL verze 5. Představuje tedy plnohodnotnou náhradu původního mysql_* rozšíření a zároveň nabízí i množství funkcí navíc. Pokud tedy používáte v aplikaci mysql a potřebujete vyřešit situaci přechodu na nový způsob, tato migrace vám zabere minimum času, protože půjde obecně pouze o přidání písmene „i“ k funkcím.

PDO rozšíření

Poslední rozšíření, které má cenu zmínit, je PDO. PDO (PHP Data Objects) je v základu velmi podobné mysqli, poskytuje srovnatelné funkce, ale na rozdíl od předchozích dvou není omezeno jednou databází, ale poskytuje drivery ke zhruba 12 různým databázím počínaje SQLite, přes MySQL, PostgreSQL až po Oracle nebo IBM databáze. A právě v této vlastnosti se jedná o nástroj, který může při dlouho běžících aplikacích znamenat vysvobození při rozhodnutí použít robustnější databázový systém, než je MySQL. Pochopitelně ale nenabízí specializované funkce přímo pro MySQL.

Při práci s PDO tak nevypadá dotaz formou mysqli_query(), ale db->query(), tedy nezávisle na aktuálně používaném databázovém systému. PDO také nabízí možnost vybrat, v jakém datovém typu budou vráceny výsledky (pole, objekt).

MySQLi nebo PDO

Otázkou tedy je, který z těchto dvou způsobů zvolit. Klasické mysql_* vzhledem ke končící podpoře nemá vůbec smysl zvažovat. Ještě než se dostanu k finálnímu zhodnocení, je potřeba zmínit, že PDO je oproti mysqli mírně pomalejší, protože v jádru funguje pouze jako “obal” a nakonec se k databázi připojuje stejně jako mysqli. Pokud ale vyvíjíte webové aplikace, více problémů s rychlostí bude kvůli nevhodné architektuře aplikace než u spojení s databází a nemá proto smysl se tímto rozdílem příliš zabývat.

Pro rozhodnutí je tedy nejdůležitější otázka, zda v budoucnosti plánujete změnu databázového systému. Pokud si dokážete se stoprocentní jistotou odpovědět, že ne, tak pro vás PDO nepřináší žádnou výraznou výhodu, proč byste ze současného mysql měli na PDO přecházet. Existuje-li ale i nepatrná šance, že někdy přece jen může být potřeba databázi změnit, PDO vám v tomto ohledu do značné míry dokáže ušetřit práci a vy se budete moci zabývat pouze tím, jak se změní prostředí databáze, ale v kódu nebude nutné přepisovat všechna mysqli_ na pg_ a podobně.

Nicméně mějte při tomto rozhodování na paměti, že na internetu slova jako stabilita nebo predikce vůbec nic neznamenají a nikdo nedokáže předvídat, co bude za rok nebo dokonce 5 let, tedy v době, kdy vaše aplikace může stále běžet. Proto osobně preferuji PDO před mysqli i za cenu menších nevýhod, které nabízí. Člověk prostě nikdy neví, co ho čeká, a je lepší být připraven.