💦 FULL SET: Phpminadmin.php - Full Archive

phpMinAdmin

Při administraci databáze nejraději pracuji z příkazové řádky, ne vždy to je ale možné. Důvodem je, že málokterý hosting nabízí přístup k příkazové řádce nebo vzdálené připojení k MySQL databázi. V tom případě přichází ke slovu phpMyAdmin. Tuto aplikaci považuji za poměrně zdařilou, má však jednu velikou nevýhodu – aktuální verze má téměř 8 MB ve více než 600 souborech. Nahrávat takový moloch na server jen kvůli tomu, abych se podíval na strukturu jedné tabulky nebo vypsal nějaká data, je ztráta času, proto si často raději napíšu jednorázový skriptík. Kdysi jsem dokonce začal psát skript, který stáhne aktuální verzi phpMyAdmina a rozbalí ji do aktuálního adresáře. Kvůli problémům se stahováním vzdálených souborů, právy zápisu a nedostupností komprimačních extenzí na většině hostingů jsem ho ale nikdy nedokončil.

Chtělo by to aplikaci se všemi základními správcovskými funkcemi, která by se vešla do jednoho nepříliš velkého souboru. A právě takovou aplikaci vám v jubilejním 300. článku na tomto blogu představuji – phpMinAdmin tyto požadavky splňuje a disponuje těmito funkcemi:

  • Připojení k databázovému serveru pod zadaným uživatelským jménem a heslem
  • Výběr databáze, vytvoření nové databáze
  • Seznam sloupců, indexů, cizích klíčů a spouští tabulky
  • Změna názvu, úložiště, porovnávání, auto_increment a komentáře tabulky
  • Změna názvu, typu, porovnávání, komentáře a výchozí hodnoty sloupců
  • Přidání a smazání tabulek a sloupců
  • Vytvoření, změna, smazání a vyhledávání podle indexů včetně fulltextových
  • Vytvoření, změna, smazání a propojení seznamů podle cizích klíčů
  • Vytvoření, změna, smazání a získání dat z pohledů
  • Vytvoření, změna, smazání a zavolání uložených procedur a funkcí
  • Vytvoření, změna a smazání spouští
  • Výpis dat s možností vyhledávání, třídění a omezení počtu vypisovaných záznamů
  • Vložení, úprava a smazání záznamu
  • Podpora všech datových typů, práce s BLOB přes nahrávání souborů
  • Provedení libovolného SQL příkazu zadaného přímo nebo nahraného ze souboru
  • Export jedné tabulky a jedné nebo všech databází
  • Schéma struktury databáze s vazbami podle cizích klíčů
  • Seznam procesů s možností jejich ukončení
  • Přehled uživatelů a práv s možností jejich nastavení

Přestože se vše vejde do jednoho souboru, který velikostí nepřesahuje 100 KB, funkcí je myslím dostatek. Nevšiml jsem si třeba toho, že by phpMyAdmin podporoval práci s uloženými procedurami a spouštěmi, editaci pohledů nebo vícesloupcové cizí klíče.

Nešetřil jsem ani na infrastruktuře rozhraní. Překlady do jednotlivých jazykových verzí jsou podporované včetně různých hlášek v závislosti na počtu (1 záznam, 2 záznamy, 5 záznamů), náležitá pozornost je věnována bezpečnosti (nejdůležitější u takového rozhraní je obrana proti XSS, Session Fixation a CSRF).

phpMinAdmin pracuje s MySQL 4.1 a 5.0 přes PHP rozhraní MySQLi, MySQL nebo PDO v PHP 4.3 a vyšším nebo PHP 5. Pro svou práci potřebuje session proměnné. K dispozici je anglická, česká, slovenská, holandská, španělská a německá jazyková verze a rozhraní je zdarma pro komerční i nekomerční použití.

phpMinAdmin je připraven k nasazení pro běžné používání, stáhnout nebo vyzkoušet ho můžete na domácí stránce projektu. Uvítám jakoukoliv zpětnou vazbu, námět na další funkce (i když je chci přidávat jen s vidinou reálného využití), případně nahlášení chyb. Pokud byste mi chtěli s něčím pomoci, uvítám korekturu anglických jazykových hlášek, design domovské stránky nebo přímo rozhraní (i když ten by měl zůstat minimalistický).

Jakub Vrána, Adminer

Diskuse

ikona Dan:

Perfektní, díky. Hned jsem si stáhnul a vyzkoušel a určitě jej budu používat v případech, kdy PHPMyAdmin není dostupný a nechce se mi jej dlouho uploadovat. Jediná škoda, že nepodporuje i MySQL 4.0:-(

Langoš:

Člověče to vypadá fakt dobře! Ještě to pořádně vyzkouším doma, ale přesně takhle to mám rád - jednoduše, ryche, přehledně ;-)
Díky díky !
P.S. Asi si k tomu nějaký css udělám, tak jestli to bude vypadat, tak pošlu ;-)

ikona Medhi:

Ahoj, je to naprosto skvělá věc a je fajn že to dáváš zdarma.

Měl bych tu pár námětů: U tabulky bych chtěl vidět alespoň počet záznamů v ní a mohlo by se zobrazovat i číslo posledního auto_incrementu. Potom při výpisu záznamů v tabulce udělat jinak procházení, protože když jich tam mám statisíce, začne se dole vypisovat hrozně moc odkazů a načítání stránky to pořádně vytíží a prodlouží. A snad poslední věc - výpis záznamů z tabulky kdyby šel podle pořadí nějakého sloupce. Zde by šel překonat phpMyAdmin, protože u něj si v prvním kliknutí nelze vybrat jestli ASC nebo DESC. Přitom to lze vyřešit dvěma šipičkami u každého záhlaví a je to.

Ještě jednou díky za tu práci.

ikona Jakub Vrána OpenID:

Číslo posledního auto_incrementu se zobrazuje v editaci tabulky, kde jde rovnou i změnit. Nejde o tak důležitou hodnotu, aby ji bylo potřeba propagovat i jinde.

O zveřejnění počtu záznamů v tabulce jsem už přemýšlel, ale ještě nevím, kde by bylo nejvhodnější místo. Asi to dám do TITLE odkazu „vypsat“, aby to bylo všechno pěkně pohromadě a zároveň to moc nepřekáželo.

Stránkování na základě tvé rady asi předělám tak, že tam bude jen odkaz na první stránku, poslední a +-2 od aktuální.

Řazení se nedělá přes záhlaví sloupců, jak je to obvyklé, ale přes zvláštní box ve vyhledávání. Díky tomu je možné řadit záznamy nejenom sestupně, ale hlavně podle více sloupců najednou, což klikání na záhlaví neumožňuje.

Díky za konstruktivní připomínky.

ikona Jakub Vrána OpenID:

Počet záznamů jsem dal do TITLE odkazů „vypsat“ v seznamu tabulek, stránkování jsem smrsknul (zatím v Subversion).

ikona Jakub Vrána OpenID:

Počet záznamů ve výsledku jsem nechal zobrazovat u stránkování.

Řazení jsem umožnil i kliknutím na záhlaví sloupce.

sway:

Parádní, díky za "objev." phpMyAdmin je na některé jednoduché úkony moc komplikovaný, tohle se hodí...

Honza:

Není to špatné, líbí se mi ta rychlost, proti phpmyadminu je to fakt příjemné. Schéma databáze vypadá dobře :) Chybí mi ale vlastnosti u prvků time/timestamp jako CURRENT_TIMESTAMP a ON_UPDATE_... které dost používám, a asi bych časem narazil na další věci co mi chybí a musí se řešit příkazem. Keep up the good work :)

ikona Jakub Vrána OpenID:

Nastavování hodnot pro timestamp jsem doplnil (do editace výchozích hodnot v Subversion).

ikona Arcao:

Super vec! Jen par kosmetickych veci mi tam chybi. Vypsani verze serveru MySQL + pres jakou datovou vrstvu (funkce) se prihlasuje (mysql/mysqli/PDO) a jeste jestli by bylo mozne provadet exporty DB bez SQL prikazu zakladani DB a jeho volby (myslim ze castejsi pripad je import DB do jiz existujici DB nez do neexistujici).

ikona Jakub Vrána OpenID:

Především informaci o použité extenzi jsem chtěl někam dát, ale nenapadlo mě vhodné místo. (A možná i výběr, která extenze se má použít, ale to spíš ne, protože MySQLi má víc možností než MySQL a to zase více než PDO, takže jediná motivace pro použití jiné extenze než nejvyšší možné by byla nefunkčnost té lepší). Přemýšlel jsem o přihlašovacím formuláři, tam ale zase nebude k dispozici verze MySQL. Takže se ptám – kam s tím?

CREATE DATABASE a USE jsem z exportu jedné databáze vyhodil.

ikona Jakub Vrána OpenID:

Informaci o MySQL verzi i použité PHP extenzi jsem dal na stránku bez vybrané databáze.

ikona tiso:

Tak toto sa celkom podarilo, veľmi užitočná vec. Ja som si spravil skript iba na výpis dát z konkrétnej databázy (prihlásenie usera, zoznam tabuliek s počtom i názvami stĺpcov, možnosť jej zmazania, výpis tabuľky, radenie podľa niektorého zo stĺpcov asc/desc, editácia/pridanie/zmazanie záznamu). Finta s favicon priamo v PHP mi teda nenapadla...

ikona Jakub Vrána OpenID:

Já jsem to měl původně řešené přes data: protokol, to ale nefunguje v IE.

ikona finc:

Je to dobre. I kdyz phpMyAdmina nepouzivam, tak male zalezitosti se jiste hodi.
Na phpMyAdminovi jsou dobre ony frames, kde vlevo mam seznam tabulek a vpravo potom s pracuji. Duvodem si myslim, ze je i to, ze pri vetsim poctu tabulek neni potreba stale nacitat tyto seznamy.
Asi by se dalo najit spousty veci, ktere zde nejsou, nebo jsou jinak, ale pro ucely, o kterych pises, si myslim, ze nema moc cenu do toho sahat. Pokud nekdo pise views, stored procedures, triggers, atd. tak jiste pouziva nejaky desktopovy vyvojovy nastroj. Do teto oblasti bych asi vubec nezasahoval.
Docela cucim, ze jsi to vsechno nacpal do jedineho souboru, pro distribuci je to dobre, pro programatora vetsinou nocni mura :)

Jinak co se tyce phpMyAdmina a jeho pouzivani. S phpMyAdminem jsem skoncil v dobe, kdy se ma databaze rozrostla do vetsich rozmeru (kdysi cca 100-150 tabulek), v te chvili byl takovy nastroj proste nepouzitelny. Dnes mam MySQL Query Browser, popripade nejaky ten plugin do Eclipse. Osobne jsem si take zkousel psat nejaky ten maly nastroj na spravu DB, ale prislo mi, ze dane dotazy na zjisteni metadat o dane databazi jsou priserne pomale. Nevim jestli je to spatnou optimalizaci MySQL nebo mnou :)

Jeste bych chtel pogratulovat k tomu 300temu clanku, je to vazne velka porce, navic kvalitnich clanku.

ikona Jakub Vrána OpenID:

O rámech jsem taky přemýšlel, ale nevýhody podle mě převažují – levý rám je potřeba čas od času refreshovat, s čímž je spousta práce, ale hlavně se nedá stránka s rámy uložit do bookmarků nebo na ni odkazovat. Seznam databází, který se na SF.net (a samozřejmě asi i jinde) načítá hodně dlouho, alespoň cachuji – i s tím je spojeno dost kódu, který považuji za nutné zlo a ne za elegantní řešení.

Já jsem od původního záměru jednoduchého skriptu pokročil k funkčně plně vybavené verzi. Komponenty jsou docela malé (kolem 3 KB) a jejich přítomnost by mohla někoho nalákat k používání phpMinAdmina i pro plnohodnotný návrh databáze (když se tak používá i v této oblasti funkčně chudší phpMyAdmin, tak proč ne phpMinAdmin).

Vývoj v jednom souboru samozřejmě neprobíhá, stáhni si zdrojové kódy... Mám napsaný článek, který to popisuje podrobněji.

Stejně jako se cachuje seznam databází by se dal cachovat i seznam tabulek, ale ty se získávají celkem rychle. Problém je samozřejmě s přenášením výpisu tabulek pořád dokola – to by vyřešily buď rámy nebo kompletní předělání rozhraní na AJAXovou variantu, ale ani jednou cestou phpMinAdmin nepošlu.

ivan_d:

'ale hlavně se nedá stránka s rámy uložit do bookmarků nebo na ni odkazovat' - ano, pro toto velmi často phpmyadmin proklínám.

ikona tiso:

Ono to pôvodne bolo vo viacerých súboroch, toto je automaticky poskladaný výsledok, ak som to správne pochopil... A pre mňa ďalší nápad na premýšľanie...

ikona RAY:

Na počet souborů (cca 250) je poměrně nenáročný TurboDbAdmin http://www.turboajax.com/products/turbodbadmin/ ale na phpMinAdmin samozřejmě nemá ani náhodou :)

Red_Devil:

Aplikace je to vynikajici, prestavam pouzivat phpMyAdmin.
Napadlo me jedno minivylepseni. Co takhle zobrazovat, jaka znakova sada se pouziva u jednotlivych textovych sloupcu, popripadne i porovnani v ramci cele tabulky?

ikona Jakub Vrána OpenID:

Zobrazuje se to v editaci tabulky. Opět to není tak zásadní informace, aby musela být i v náhledu tabulky.

paranoiq:

vypadá to moc dobře. hlavně to vyhledávání a řazení je vyřešeno rozumě. jen mi tam chybí třeba operátor IN.
phpMyAdmin je opravdu moloch a jeho občasné bugy a lenost mě štvou. zvlášť v poslední době mi připadá, že se vývoj točí spíš kolem malovaných ikonek než kolem funkčnosti. věřím že vývoj phpMinAdmina se touhle cestou nevydá.

ikona Jakub Vrána OpenID:

Operátor IN jsem přidal (zatím v Subversion).

Těžko říct, kudy se bude ubírat vývoj, já jsem všechny své požadavky víceméně už zapracoval.

error414:

Me se to take moc libi ale dulezita vec pro me chybi.

Aby se vypisoval hlavni dotaz na Db. Napriklad pokud pouziji filter pri vyberu z tabulky. Tak bych rad videl dotaz.

Jak se tak divam do kodu tak to ze je to v jednom souboru si sebou vzalo krutou dan. (write only).

Jinak ten frame v phpmyadminu neskonale toci.

ikona Jakub Vrána OpenID:

Výpis dotazu zvážím, ale moc se mi ho tam dávat nechce nebo jen volitelně.

Jak správně pochopil tiso, tak jeden soubor je jen výsledkem kompilace. Můžeš si stáhnout i zdrojové kódy.

ikona Jakub Vrána OpenID:

Výpis dotazu jsem přidal spolu s možností jeho editace.

ikona v6ak:

Stáhl jsem si 1.7.0 a žádný SQL příkaz tam nevidím ani při výpisu, ani při úpravě tabulky. Je to škoda, protože pak je PhpMinAdmin nepoužitelný, pokud chci synchronizovat strukturu.

ikona Jakub Vrána OpenID:

Je to zatím jen v SVN. Čemu říkáš „synchronizovat strukturu“? Možná by ti mohl pomoci nový export.

ikona v6ak:

To bych musel exportovat data a pak zase importovat. To není ono. Prostě mi jde o výstup v podobě nějakého ALTER TABLE.

ikona Jakub Vrána OpenID:

Aha, tak přesně tenhle dotaz se ve verzi 1.8.0 bude zobrazovat. V demu už je to vidět: http://phpminadmin.sourceforge.net/phpMinAdmin.php?username=.

ikona v6ak:

Tak to je skvělý. Těším se na 1.8.0. Pak asi zapomenu na PhpMyAdmina. Ještě by mohlo jít nastavit automatické rozbalování, ale není to nutné.

Pavel:

Perfektní hnedle jsem alespoň kliknul na reklamu ať nějak ocením obrovské množství práce co tohle muselo dat.

ikona LLook:

Komu tím prospěješ?

Že se mnoho lidí chová takto, to inzerentům snižuje konverzní poměr a výhodnost investice do této formy reklamy. Čím více lidí bude takto "bohatým brát a chudým děkovat", tím méně výhodné bude inzerovat v Adsense a tím méně investic do toho poteče. V konečném důsledku pak prodělávají všichni - reklamní systém, inzerent i poskytovatel prostoru.

emilk:

a neni misto uploadu by maleho admina lepsi sshcko s jednim tunelem na mysql port?

priste si ten mysql port pritahnout na lokal a pak uz se na nem vyradit?

ikona Jakub Vrána OpenID:

Pokud to je na hostingu povolené, tak to je samozřejmě taky schůdná cesta.

ikona Arcao:

Na to existuje řešení ve formě MySQL-PHP tunelu. Ten používá třeba Navicat MySQL od PremiumSoftu. Jen škoda, že je placený.

MySQL-PHP tunel používá i MySQL-Front.

ikona finc:

Mate nejake informace o tom PHP-MySQL tunelu? Nikdy jsem o tomto neslysel.
Jinak, ja se domnivam, ze bez primeho povoleni pripojit se k MySQL z jine IP adresy to nepujde.
Jinak, ktery webhosting dodava ssh?

error414:

ten tunel je prave obejiti toho omezeni s IP. Tunel je realizovan PHP souborem co je na ftp a zprostredkovava komunikaci

klient <==> tunel (php soubor na ftp-pro neho je mysql na localhostu) <==> mysql

Nekolikrat jsem to pouzil a je to pouzitelne.

Luk.yer:

souhlasim, PHP tunel pouzivam bezne a nepocituji ani zadne vetsi lagy. Na FTPko se nahraje ntunnel_mysql.php a v navicatu se pripojit na http tunel ... Mimochodem existuje i lite verze (free) navicatu, je to paradni software

ikona Balud:

Tak tomu říkám práce gurua. Jsem naprostu uchvácen. Díky

Domo:

:( nějak mi to nejde ze sourceforge stáhnout. vždy mi to nabídne prázdný soubor *.php a když chci zdrojové kódy, tak je  to zase prádnej *.zip archiv.

ikona Jakub Vrána OpenID:

Možná se to zatím nedostalo na všechna zrcadla. Zkus třeba Duesseldorf, Germany.

Honza Odvárko:

SQL command jen s rozhraním MySQL.. to muselo dát práce než byl středník středníkem tam kde má. Bravo.

ikona Jirka:

Já hlavně oceňuju export. Protože kdo někdy zkoušel export u phpMyAdmin mi jistě dá zapravdu, že moc příjemné to není.

Jiri Lenert:

Export by mohl byt jeste lepsi, pokud by exportoval i dany vyber (i do CSV).

Diky.

ikona Jakub Vrána OpenID:

CSV export neplánuji. Co máš na mysli „daným výběrem“? Export dat momentálně zobrazených ve výpise (po vyhledávání)?

Jiri Lenert:

Ano, myslel jsem export dat po vyberu.

tomh:

Zcela OT - češtinářské:

Mám rád češtinu tam kde se hodí, ale myslíte si že je vhodné překládat "trigger" na "spoušť"? Mám pocit že to je dost otrocký překlad - nevím jak ve vašem okolí, ale já jsem neslyšel nikoho kdo by triggeru říkal spoušť.

Pravda viděl jsem to napsané v nějakých starých učebních textech, ale podle mě je to v dnešní době dost divné označení. Aspoň pro mě, u toho slova jsem se zarazil a musel chvilku přemýšlet o co jde.

ikona Jakub Vrána OpenID:

V odborné literatuře je to docela běžné. Pravda je, že když jsem dělal odbornou korekturu knihy o MySQL, tak jsem si dal tu práci a všech asi 200 výskytů slova spoušť (v různých pádech) jsem nahradil za trigger. Pak jsem se s tím slovem ale setkal i jinde, tak jsem tady použil zase spoušť. Ještě to zvážím, protože to je navíc mnohoznačné slovo (něco spouští nebo pohroma)...

ikona Jakub:

Už Vám někdo řekl, že jste geniální ? :)

Martin:

Mimochodom, ked si stiahnes phpMyAdmin len v anglickej verzii (http://prdownloads.sourceforge.net/phpmyadmin/…-english.7z) tak po rozbaleni bude mat 'len' 4MB a nejakych 440 suborov ;-).

MicTech: