phpMyAdmin VS Adminer

Školení, která pořádám

Článek vyšel na serveru Zdroják.

Aplikace phpMyAdmin je nepsaný standard pro správu databáze MySQL z prostředí webového prohlížeče a mnoho uživatelů pro správu této databáze ani žádný jiný nástroj nepoužívá. phpMyAdmin ale není jediný nástroj svého druhu a jiné aplikace se mu snaží konkurovat. Jednou z těchto aplikací je Adminer, který je stejně jako phpMyAdmin napsaný v PHP, ale některými vlastnostmi se snaží odlišit.

Poznámka: Autor článku je zároveň autorem aplikace Adminer, článek je proto pochopitelně zaujatý, i když se snaží být férový.

Instalace

phpMyAdmin 3.2.4 lze stáhnout ve dvou verzích:

Adminer 2.2.1 zabírá 174 kB v jednom souboru a na hosting se zkopíruje prakticky okamžitě. Jednojazyčná anglická verze má 119 kB, ke stažení je i jednojazyčná česká a slovenská verze.

phpMyAdmin používá licenci GPL 2, Adminer o něco vstřícnější licenci Apache 2, která není nakažlivá.

Co se požadavků na server týče, phpMyAdmin od verze 3 vyžaduje PHP 5.2+ a MySQL 5, pro práci se staršími verzemi je nutné použít starší, stále udržovanou řadu 2. Adminer se spokojí s PHP od verze 4.3 a s MySQL od verze 4.1. phpMyAdmin od uživatele vyžaduje zapnuté cookies, Adminer se obejde i bez nich. Adminer pro práci s databází dokáže využít i extenzi PDO, phpMyAdmin ne.

phpMyAdmin je k dispozici v 57 jazycích, Adminer ve 12, základní světové jazyky a čeština jsou k dispozici v obou.

phpMyAdmin dovoluje nastavit celkem 143 konfiguračních direktiv, mezi jinými třeba i tu určující, kam povede odkaz u ikony ve výpisu tabulek. Výchozí hodnota této konfigurační direktivy se navíc v průběhu času změnila, takže uživatelé, kteří se ikonu naučili používat (což není zcela intuitivní), bývají zmateni. Adminer žádnou možnost konfigurace nenabízí, všechny instalace se tudíž chovají stejně.

phpMyAdmin obsahuje instalační skript, který dovoluje nastavit některé konfigurační direktivy (jiné je potřeba přímo zadat do PHP kódu). Tento skript je obvykle nezbytné spustit, protože ve výchozí konfiguraci nedovoluje phpMyAdmin zadat název serveru nebo se přihlásit pod uživatelem bez hesla. Adminer vzhledem k absenci konfigurace žádnou instalaci nevyžaduje.

Vzhled

phpMyAdmin nabízí uživateli výběr mezi dvěma vzhledy, dalších 12 vzhledů lze navíc stáhnout, samostatně lze kromě toho nastavit barvu pozadí. Jeden vzhled má kolem 120 souborů. Adminer vedle vestavěného vzhledu dovoluje stáhnout 5 dalších, každý vzhled je tvořen jediným souborem.

phpMyAdmin používá pro zobrazení stránek rámy a samostatná okna. To uživateli znemožňuje ukládat si jednotlivé stránky do oblíbených položek a otvírat je do samostatných panelů. Adminer na druhou stranu rámy nevyužívá, díky čemuž si uživatel každou stránku může uložit do oblíbených položek nebo otevřít do samostatného panelu.

phpMyAdmin používá interní zvýrazňovač syntaxe SQL dotazů. Ten ve výchozím nastavení dotaz zároveň i přeformátuje, což může být někdy užitečné a jindy na škodu. Adminer používá externí JavaScriptový zvýrazňovač syntaxe, který zároveň vytváří odkazy do dokumentace použitých příkazů. Adminer navíc detekuje verzi MySQL a odkazuje do dokumentace používané verze.

Možnosti rozšíření

phpMyAdmin možnosti svého rozšíření staví na bohaté konfiguraci a na vytvoření pomocných tabulek v databázi. Pomocí nich lze např. ke sloupcům zadat informace o typu dat, takže phpMyAdmin pak místo binárních dat zobrazuje obrázek. Adminer dovoluje vytvořit objekt, pomocí kterého lze kompletně změnit jednotlivé části aplikace (např. si vytvořit vlastní způsob autorizace nebo libovolným způsobem upravit výpis nebo editaci dat). Tento způsob je o něco náročnější (vyžaduje programování), ale nabízí podstatně širší možnosti přizpůsobení.

Import a export

phpMyAdmin i Adminer dovolují importovat data ve formátu SQL a CSV, volitelně komprimovaná. Adminer navíc umožňuje načíst SQL soubor z disku serveru, což dovoluje spustit i velké soubory, jejichž přenos je v konfiguraci PHP zakázaný (soubor lze nahrát např. pomocí FTP). phpMyAdmin tuto možnost nabízí také, ale je potřeba ji nakonfigurovat. Pro CSV import dovoluje phpMyAdmin použít příkazy INSERT, INSERT IGNORE nebo REPLACE. Adminer používá příkaz INSERT s klauzulí ON DUPLICATE KEY UPDATE, která jako jediná provede import správně. Při CSV importu lze v phpMyAdminu ignorovat několik prvních řádek, Adminer si na druhou stranu dokáže z prvního řádku načíst seznam sloupců, které se pro zpracování souboru použijí.

phpMyAdmin dovoluje exportovat data ve 12 formátech jako např. LaTeX nebo Word. Adminer nabízí jen formáty SQL a CSV, u SQL ale nabízí i možnost tzv. ALTER exportu, který slouží primárně k synchronizaci vývojového a produkčního serveru (vypíše příkazy, které je nutné spustit, aby stav cílové databáze odpovídal stavu zdrojové databáze, obvykle ALTER TABLE).

phpMyAdmin a Adminer se liší ve způsobu hromadné editace záznamů. phpMyAdmin při hromadné editaci zobrazí pro každý záznam vlastní formulář, které uživatel edituje zvlášť. Adminer nabízí skutečně hromadnou editaci, kdy se všechny záznamy editují najednou (u každého sloupce lze nechat původní hodnotu, nastavit novou hodnotu nebo provést relativní operaci jako je třeba přičtení čísla). Pro stejnou úpravu třeba všech záznamů v tabulce phpMyAdmin využít nelze.

Cizí klíče

phpMyAdmin má velmi slabou podporu pro cizí klíče, které se dají vytvářet v tabulkách typu InnoDB. Na speciální stránce lze vytvořit pouze jednosloupcové cizí klíče, s kterými se dále nikde nepracuje. Vícesloupcové cizí klíče nelze vytvořit vůbec. Adminer naproti tomu dovoluje jednosloupcové cizí klíče vytvořit přímo při vytváření nebo úpravě struktury tabulky, podle názvu sloupce navíc vytvoření cizího klíče automaticky nabízí. Pro vytvoření vícesloupcového cizího klíče a jejich úpravy slouží samostatná stránka.

V Admineru se z cizích klíčů při výpisu dat automaticky vytváří odkazy. V phpMyAdminu se tyto odkazy vytváří pouze po vytvoření a konfiguraci speciálních tabulek. Ve verzi Adminer Editor se navíc vytváří i zpětné odkazy (např. na všechny knihy daného autora).

V phpMyAdminu lze schéma databáze zobrazit jen po konfiguraci speciálních tabulek ve formátu PDF. Pozici tabulek ve schématu lze upravit pouze ručně zadáním souřadnic. V moderních prohlížečích lze použít také návrhář využívající značku <canvas>. Adminer schéma databáze včetně propojení tabulek zobrazuje přímo v HTML stránce s možností tabulky přetahovat pomocí myši.

Použitelnost

Při vytvoření tabulky v phpMyAdminu je nutné předem stanovit počet sloupců. Pokud si teprve při jejím zadávání uvědomíme, že potřebujeme ještě nějaké sloupce navíc, je nutné odeslat formulář. phpMyAdmin navíc tabulky do tří polí zobrazuje po sloupcích a od čtyř polí po řádcích, takže se při přidání čtvrtého sloupce tabulka celá přeskládá. Adminer naproti tomu do tabulky přidává další pole automaticky podle potřeby. Obdobný rozdíl ve způsobu práce je vidět třeba i u vícesloupcových indexů.

Při změně struktury tabulky je v phpMyAdminu nutné nejprve vybrat, kam chceme jednotlivé sloupce přidat. Pokud je chceme přidat na různá místa, je nutné to udělat ve více krocích. Adminer naproti tomu dovoluje sloupce přidávat přímo v editaci struktury tabulky. Kromě toho umožňuje změnit i pořadí sloupců, což phpMyAdmin vůbec neumožňuje.

Pro editaci výčtového typu enum a set nabízí Adminer komfortní editor, kde se každá položka píše na jeden řádek textového políčka. Uživatelé phpMyAdminu se musí řídit následujícím návodem:

Pokud je sloupec typu „enum“ nebo „set“, zadávejte hodnoty v následujícím formátu: 'a','b','c'... Pokud potřebujete zadat zpětné lomítko („\“) nebo jednoduché uvozovky („'“) mezi těmito hodnotami, napište před ně zpětné lomítko (příklad: '\\xyz' nebo 'a\'b').

V phpMyAdminu i v Admineru lze existující záznamy duplikovat, nástroje ale používají opačný postup operací. V phpMyAdminu se vyvolá běžným způsobem editace záznamu a po dokončení úprav uživatel vybere, že se má záznam uložit jako nový. To může vést k tomu, že uživatel delší dobu upravuje záznam určený k duplikování, ale pak ho po paměti uloží a tím přepíše původní záznam. Adminer proto volí opačný postup úkonů – nejprve se vybere operace klonování a pak se nový záznam uloží běžným způsobem.

phpMyAdmin i Adminer nabízí výpis proměnných na serveru, Adminer k nim ale přidává i odkazy do dokumentace každé z nich (najít je v dokumentaci MySQL dá totiž trochu práce). phpMyAdmin na druhou stranu obsahuje popis všech stavových informací.

phpMyAdmin zobrazuje velikost tabulek spolu s jednotkami, Adminer ji zobrazuje v bajtech. Díky tomu jsou na první pohled snadno rozpoznatelné velké tabulky od malých, v phpMyAdminu se dá podle velikosti zase třídit.

Při zadávání binárních dat dovolují oba nástroje nahrát soubor z disku, phpMyAdmin ale tato binární data nedovoluje stáhnout (možné to je pouze při vytvoření pomocných tabulek a explicitního určení všech sloupců, jejichž obsah má jít stáhnout). Adminer stažení binárních dat nabízí vždy, zobrazitelná data (např. text ve sloupci typu blob) navíc také zobrazuje.

Funkční výbava

phpMyAdmin i Adminer drží krok s vývojem MySQL a dovolují pracovat i s moderními objekty jako jsou triggery, uložené procedury nebo události. Zatímco ale Adminer nabízí komfortní uživatelské rozhraní, kde uživatel vyplňuje jednotlivé parametry do připravených kolonek a stejným způsobem může všechny objekty i vytvářet, phpMyAdmin se omezuje na výpis existujících objektů a vypsání SQL příkazu pro jejich vytvoření. Uživatelské rozhraní k těmto objektům tedy vůbec neexistuje a uživatel musí přesně znát syntaxi SQL dotazů, pomocí kterých je může vytvářet. Stejně tak phpMyAdmin neumožňuje uložené procedury zavolat jinak než pomocí ručního sestavení SQL příkazu.

phpMyAdmin dovoluje vytvořit pohled z libovolného SQL příkazu (pohled se ale potom automaticky nezobrazí v seznamu tabulek), neumožňuje pohledy ale měnit. V přehledu tabulek databáze také chybí odkaz pro výpis záznamů pohledů. Adminer pro vytvoření a správu pohledů nabízí vlastní uživatelského rozhraní.

Adminer dovoluje při výpisu tabulky na jednotlivé sloupce aplikovat funkce (dokonce i agregační), phpMyAdmin nic takového nenabízí. Adminer dovoluje tabulku třídit podle více sloupců (např. nejdřív podle data a potom podle času), phpMyAdmin obdobnou funkci nabízí jen komplexním databázovým dotazem.

U SQL příkazu nabízí oba nástroje různou funkčnost. phpMyAdmin dovoluje dotaz profilovat, Adminer dovoluje vypsat více výsledků v rámci jednoho zavolání příkazu. Adminer navíc zobrazuje odkazy pro editaci záznamů i u dotazů spojujících více tabulek. Oba nástroje dovolují příkaz vysvětlit, phpMyAdmin k tomu otevře novou stránku, Adminer tuto informací zobrazí přímo pod dotazem. Oba nástroje ukládají historii provedených příkazů, Adminer do této historie ale ukládá i příkazy provedené přes uživatelské rozhraní.

Bezpečnost

Adminer za dobu své existence opravil dvě bezpečnostní chyby, phpMyAdmin za stejnou dobu dvacet (za celou dobu celkem 47). phpMyAdmin navíc nenabízí spolehlivou ochranu proti útoku ClickJacking (kvůli využívání rámů by to šlo jen obtížně).

Jiné chování je vidět i u externích odkazů, které phpMyAdmin odkazuje přímo (po patřičné konfiguraci) a tím jim přes hlavičku Referer předává URL, na kterém správce databáze běží. Adminer externí odkazy směruje přes speciální stránku, která hlavičku Referer skryje.

Výkonnost

Adminer je při práci díky jednodušší architektuře o něco rychlejší než phpMyAdmin. Podle testu Juraje Hajdúcha je to průměrně o 28 %.

Kromě toho Adminer velmi obezřetně pracuje s dlouhotrvajícími operacemi. Jednak před provedením delší operace explicitně posílá dosavadní výstup do prohlížeče, čímž uživateli dovolí pracovat s dosud poslanými daty. Zásadním rozdílem je ale to, že Adminer před provedením dlouhotrvající operace odemkne session, čímž uživateli dovolí s aplikací pracovat v jiném panelu prohlížeče. phpMyAdmin je během dlouhé databázové operace jednoduše zablokován.

Důraz na rychlost práce je u Admineru vidět také v přehledu všech databází. phpMyAdmin v něm zobrazuje počet tabulek v jednotlivých databázích, získání této informace ale může trvat až desítky vteřin. Adminer proto tuto informaci raději zobrazuje až u jednotlivých databází.

Závěr

Přestože je phpMyAdmin zavedený standard pro správu databáze MySQL z webového prohlížeče, řadu funkcí kupodivu nenabízí nebo je nutné je zvlášť konfigurovat. Kromě toho má překvapivé mezery v použitelnosti, často prováděné operace nejsou intuitivní nebo k nim vede zdlouhavá cesta. Padesátkrát menší Adminer nabízí v mnoha oblastech použitelnější uživatelské rozhraní a na řadě míst také více funkcí.

Jakub Vrána, Adminer, 12.1.2010, diskuse: 25 (nové: 0)

Diskuse

w:

Jestli muzu neco k admineru, v ne uplne stare verzi (mozna uz se to zmenilo) me docela nevyhovuje to, ze kdyz jednou zmenim limit z 30 na 1000 u vypisu tabulky tak si to adminer nezapamatuje a musim to menit casteji, chci-li vypsat celou tabulku. Jinak je adminer super!

ikona Jakub Vrána OpenID:

Nic se na tom nezměnilo, výchozí limit lze upravit pouze vytvořením rozšíření. Ale můžeš si do bookmarků uložit stránku s nastaveným limitem.

w:

Nemyslim vychozi limit, spis aby si to pamatovalo limit po dobu sezeni. A jak se vytvari to rozsireni?

ikona Jakub Vrána OpenID:

Rozšíření si to klidně může pamatovat po dobu sezení. Postup vytvoření rozšíření je popsán na http://www.adminer.org/cs/extension/.

w:

Diky, fakt je to super!

smrdidlo:

já si to změnil přímo ve zdrojáku (funkce selectLimitProcess())

w:

No ale diky te dedicnosti to bude fungovat i s novou verzi...

smrdidlo:

to uznávám, ale zase není tak pracný v nové verzi vyhledat jedno místo a přepsat v něm 3 znaky...

---:

Nevím, jestli to jen nemohu najít, ale nešlo by přidat tlačítko pro vytvoření kopie tabulky (včetně dat) a nejlépy i vytvoření kopie databáze?

ikona Jakub Vrána OpenID:

Asi by to šlo, ale nepovažuji to za tolik využívané, aby to mělo místo v uživatelském rozhraní. Sám bych to řešil exportem databáze nebo tabulky a jejím zpětným importem (do jiné databáze nebo po přejmenování tabulky).

Michal:

Zdravím. Docela by se mi hodilo, když spustím SQL příkaz, aby se mi na konci zobrazil úspěch celé akce. Dělal jsem export a import všech dat serveru a nechce se mi kontroloval úspěchy jednotlivých příkazů.

Prdlořeznictví Krkovička, n. p.:

Už jsem též psal něco podobného (a sice možnost zobrazovat jen ty příkazy, které skončily chybou)

ikona Jakub Vrána OpenID:

Do SVN jsem přidal přehled SQL příkazů, které skončily chybou.

Michal:

Teď jsem si všiml, že checkbox u změny oprávnění mysql uživatele pracuje opačně. Když je zatrženo, tak má být zahashované, ale není a naopak.

ikona Jakub Vrána OpenID:

Je to správně. "Zahašované" znamená, že zadáváš zahašovanou podobu hesla, takže se může zobrazit v plaintextu. V opačném případě zadáváš čistou podobu hesla, takže se musí zadávané znaky skrýt.

jval:

šlo by nějakou jednoduchou úpravou dosáhnout toho abych se nemusel přihlašovat?

při použití na localhostu je to (alespoň pro mne) zbytečné

ikona Jakub Vrána OpenID:

Ano, v adresním řádku lze předat parametr ?username=

Heslo se načítá z konfigurace PHP mysql.default_password resp. mysqli.default_pw.

bene:

Zdravím,
adminer je fakt dobrá práce.
Z mého pohledu má jen pár nedostatků, některé jsou menší, některé větší, některé hodně subjektivní a některé by asi šli vyřešit rozšířením nebo upravou css.

- Oddělení odkazu pipou (při 4 odkazech vedle sebe jsou velmi nepřehledné).

- Vykonané sql příkazy do scrool boxu (je to pak šílené, scrollovat až na konec, zkuste si importnout Magento :-)). Při hodně dotazech mi to hazí ve firefoxu, script is bussy - klasická hláška firefoxu. Už to tu bylo navrženo, checkbox na zobrazení jen chybových hlášek. A v obou případech (všechny hášky nebo jen chybové) zobrazit na konci, počet ok a počet chybných dotazů.

- Checkbox na označit vše i na spodu tabulky.

- Změnit vytváření opravnění k tabulce. Ten klasický zápis `moje\_testovaci\_datbaze`.* je hodně neintuivní a hlavně pro ne dobře znalého člověka neznámé. Taky musím vždy přemýšlet na správným zápisem, protože to nedělám každý den, ale nedělám to zase výjmečně aby to nebylo nepříjemné. Nefunguje přidání další tabulky (čekal bych, že se v oprávnění přidání další tabulky bude chovat jako jinde, třeba v přidavání sloupců nebo v indexech). Nejlepší by byl selectbox na výběr tabulky, pro kterou definuji práva.

- Změna několika záznamů. Někdy se hodí způsob v adminerovy, někdy zase v phpmyadmin. Nejlépe mít možnost obou.

Jinak dík za rychlý a intuitivní nástroj. Pokud by se doladily ty drobnosti co jsem napsal, nemělo by to už asi žádnou chybu (pro mě).

ikona Jakub Vrána OpenID:

Oddělení odkazů by asi šlo vyřešit stylem, oddělovač v HTML je zbytečný.

Stránka s posuvníkem obsahující box s posuvníkem je špatně použitelná, na konec stránky se dá snadno dojet. Do SVN jsem přidal přehled chybných dotazů.

Script is bussy je kvůli zvýrazňovači syntaxe. Asi by se dal spustit jen na omezený počet dotazů, ale to by bylo matoucí.

Druhý checkbox není kam dát, navíc jeho umístění nahoře je poměrně standardní.

Systém oprávnění je příliš komplexní, než abych na něj dělal UI – lze určit práva databázím, tabulkám, sloupcům, procedurám, … Přitom se to zase tak často nevyužije, takže zůstanu u ručního zadávání objektu oprávnění.

Způsob jednotlivé změny více záznamů rozmýšlím. V plánu je už poměrně dlouho.

Tomáš Kapler:

S Adminerem si teď hraju druhý den, zatím musím říct úžasné, škoda že jsem to neobjevil dřív.
Narážím na pár drobností
a) pozice tabulek ve schéma se mi neukládá do cookie i když podle toho co jsem četl by měla, tj. pokaždé když tam přijdu znovu je to opět pod sebou.
b) když přejmenuji tabulku a dám uložit, tak zůstanu jakoby v té staré tabulce, tj. když pak něco zkusím udělat, tak to skončí chybou, že tabulka neexistuje
c) chtěl jsem udělat dva reference na cizí klíče na stejné ID ve stejné tabulce a hodilo to nějakou chybu, musím to udělat postupně
d) trochu bych uvítal, kdyby u typů bylo vidět i jejich rozsah, nikdy si to nepamatuji a zvažuji který typ je nejvhodnější
e) trvalo mi, než jsem pochopil jak zadat hodnoty do set/enum (resp. musel jsem to udělat přes phpmyadmin a pak jsem kouknul co to udělalo). Tedy že to musím napsat do pole "délka" pod sebe
f) "naštvalo" mě, že mi to automaticky udělalo lowercase na vytvářené tabulky, ale ptal jsem se zkušenějších, že je to tak dobře.
g) uvítal bych info, jak mám psát správně názvy sloupců, aby se automaticky napovídaly ty reference, jak to někde popisuješ. Ostatně někdy bych uvítal vůbec info jaký by měl být standard pro pojmenování sloupců, tabulek a databází. CamelCase je prý blbost, že prý vše malým a podtržítka, nevím jak nazývat id v tabulce, jestli u referenčních bude category_id či id_category, jestli tabulky pojmenovávat množným či jednotným číslem ("categories" vs. "category", category_id zní líp, zase množné je popisnější), jak pojmenovat N:N tabulky atp. ale to sem moc nepatří

ale všechny tyhle věci jsou úplné blbosti dané spíš mou blbostí, to jen abys věděl s jakým materiálem musíš pracovat ;)

ikona Jakub Vrána OpenID:

Díky za připomínky. V první řadě zkontroluj, jestli používáš aktuální verzi.
a) Doporučoval bych podívat se, jaké cookies se vlastně nastaví.
b) Přejmenování tabulky tě přesměruje na nový název. Pokud ne, tak to popiš podrobněji.
c) Opět to popiš podrobněji. To je věc, která normálně funguje.
d) Pro rozsah typů se podívej do dokumentace nebo si zapamatuj, že to je postupně 1, 2, 3, 4 a 8 bajtů.
e) Jedna hodnota na jeden řádek mi u textarea přijde zcela intuitivní. Navíc se tam hodnoty můžou zadat i stejně jako při ruční definici (tedy uzavřené do apostrofů a oddělené čárkami).
f) To ovlivňuje volba MySQL lower_case_table_names.
g) Podporovaná pojmenování sloupců jsou popsaná na http://php.vrana.cz/adminer-2-0-0.php, podrobněji pouze ve zdrojáku http://adminer.svn.sourceforge.net/viewvc/…=markup#l_83.

Michal:

Ad a) Dělá mi to také, neuloží se mi pozice schématu db. Dělá mi to ale jen v Chrome. Ve Firefoxu je to OK.

ikona Jakub Vrána OpenID:

Už je to delší dobu opravené v SVN.

Tomik:

Kdy oficiálně vyjde v 2.3.0 ?

ikona Jakub Vrána OpenID:

Až dorazí překlady, předpokládám příští týden.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.