Adminer 2.2.1
Školení, která pořádám
Nová verze nástroje pro správu databáze MySQL přináší jen drobná vylepšení:
- Zvýrazňují se odkazy, které vedou na právě zobrazenou stránku. Tyto odkazy mají smysl, protože např. u výpisu dat zruší nastavené filtry, ale jejich zvýraznění přispívá k tomu, aby člověk poznal, kde je.
- Počet tabulek zobrazovaný od minulé verze v seznamu databází za určitých okolností velmi zpomaloval. Přemýšlel jsem, jestli ho mám načítat dodatečně AJAXem, ale nakonec jsem ho prostě přesunul k výpisu tabulek v databázi (jen jako nápovědný text u políčka pro označení všech tabulek).
- Do Editoru jsem přidal možnost vyhledávání podle cizích klíčů a přidal jsem odkaz na vytvoření nové položky rovnou u odkazu na související záznamy. Přemýšlel jsem, že bych tento odkaz přidal i do výpisu tabulek, ale moc užitečný se mi tam nezdá. Jak jste na tom vy – vytváříte někdy záznam, aniž byste se potřebovali podívat na výpis stávajících, a potřebujete odkaz na tuto akci na každé stránce?
Zlepšení konkurenčnosti
Adminer používá k ukládání dat (např. přihlašovacích údajů) session proměnné. PHP zamyká soubory, do kterých se data ukládají, aby si je skripty vzájemně nepřepisovaly. To vede k tomu, že když se spustí nějaká dlouhotrvající operace (např. ALTER TABLE velké tabulky), tak se nedá s aplikací pracovat ani v jiném okně prohlížeče. Tedy až do verze 2.2.1… Session soubor se už dříve zavíral funkcí session_write_close, když už do session proměnných nebylo potřeba nic zapisovat. Nově se zavírá soubor prakticky ihned a když je to potřeba, tak se zase otevře. To ovšem není tak jednoduché, protože otevření provádí funkce session_start, která se zároveň snaží poslat i hlavičky. To je potřeba jí zakázat:
<?php
session_cache_limiter("");
if (ini_set("session.use_cookies", false) !== false) {
session_write_close();
}
?>
Diskuse
Na matoucí struktura tabulky/pozměnit tabulku to někdy pomůže (logicky nejdu ze stránky A na stránku A), ale není to úplné řešení.
Co takhle místo "Struktura tabulky" napsat "Zobrazit strukturu"?
OK, změnil jsem to v SVN na Zobrazit strukturu (Show structure). Vypsat tabulku jsem navíc změnil na Vypsat data (Select data).
Michal:
Měl bych dotaz ohledně exportu dat. Exportuju tabulku bez jejich dat. V SQL se u tabulky nastaví "AUTO_INCREMENT=xxx". Lze upravit adminer, aby tento parametr do dumpu nedával pokud nedumpuju i data ?
Jakub Vrána :
Při exportu se používá prostě SHOW CREATE TABLE, někomu se AUTO_INCREMENT navíc může hodit i v tomto případě, takže to tak asi nechám.
kozotoč:
Zdravím.
(ne)Rád bych reportoval chybu (nebo spíš spuštění chybové hlášky - to je asi přesnější) v Admineru.
Nevím, jestli s tím Adminer coby pouhý skript něco zmůže, nebo tu chybu hodí PHP tak jako tak.
Myslím, že se chyba dá nasimulovat tak, že si spustím nějaký dotaz přes SQL okno, pak smažu historii spuštěných SQL příkazů a poté začnu v prohlížeči přecházet zpět na minulé stránky.
Nevím, jak ostatním, ale mě v takovém případě Adminer hodí na přihlášení s hláškami:
Warning: session_start() [function.session-start]: open(C:\DOCUME~1\USER~1\LOCALS~1\Temp\\sess_7su79n2l42c87sklcpjqlvp692, O_RDWR) failed: Permission denied (13) in C:\path\adminer\index.php on line
Warning: Unknown: open(C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\\sess_7su79n2l42c87sklcpjqlvp692, O_RDWR) failed: Permission denied (13) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
(mám PHP 5.3.0,Apache 2.2.11,MySQL 5.1.35,Win)
Kdyžtak zkus, Jakube.
Jakub Vrána :
Problém se mi nedaří reprodukovat. Podle chybové hlášky to spíš vypadá na obecný problém s místem zápisu session proměnných.
Michal:
Zdravím.
Provedl jsem MySQL příkazy z SQL souboru pro vytvoření DB a naplnění dat. Konkrétně pro DataGrid Romana Sklenáře
http://addons.nettephp.com/cs/datagridPo provedení se však vytvořená DB nezařadila do seznamu a ani při přechodu na jinou stránku v něm nebyla.
Zařadila se až pokud jsem ji zadal do 'db' v poli GET.
Pokud jsem to reprodukoval znova už se tak nestalo.
Je to nějaká náhodná chyba nebo jen projev velkého množství dat ?
Jakub Vrána :
Při ručním spuštěním SQL příkazu se hledá příkaz CREATE DATABASE nebo DROP DATABASE v prvním 1 MB dat. Tady je, takže by to mělo fungovat a také se mi to nepodařilo reprodukovat.
pojízdná kočka:
Opakuje Adminer při exportu řádků příkaz INSERT INTO ... ?
Teď jsem importovala jím vyexportovaný soubor (který měl asi 8000 položek a přes 1 MB) a nešlo to - zobrazila se jen chybová hláška o překročení nějakého paměťového limitu (pardon, že si ji nepamatuju přesně). Musela jsem ten výstup ručně editovat a přidávat INSERT INTO každých několik řádků (což je na nic :-( ).
Snad by stálo za zvážení přidání jednoho jednoduchého políčka do formuláře pro export, po kolik řádcích zopakovat INSERT INTO. Implementace také nebude těžká a pro tebe, Jakube, to nebude žádný problém, ne?
Pochopila jsem, že Adminer nechceš mít zbytečně komplikovaný, ale tadyto imho patří mezi ty důležitější věci.
Jakub Vrána :
Počet záznamů je nedůležitý, zásadní je jejich velikost. Příkazy se automaticky rozdělují po 1 MB, což je výchozí hodnota direktivy max_allowed_packet, která to ovlivňuje.
pojízdná kočka:
Chceš říct, že při exportu počítáš, kolik data v příkazu zabírají a podle toho dělíš opakovanými INSERTy?
pojízdná kočka:
Tak to je fajnové. To myslím ani phpMyAdmin nemá.
Můžu se ještě zeptat, jak to proběhne, když i jeden takový záznam má data přes 1 MB (například nějaký soubor, uložený v databázi)?
Jakub Vrána :
V tom případě se maximální povolená velikost překročí. V minulosti se Adminer pokoušel velikost max_allowed_packet v exportu změnit, to se ale bohužel nepovede. Nic moc jiného se s tím dělat nedá (INSERT a následný UPDATE už by bylo příliš).
pojízdná kočka:
Jediné, co mě napadá, je INSERT a jako další příkaz UPDATE (nebo UPDATy), které hodnotu sloupce doplní pomocí CONCAT. Uznávám, že to je už dost komplikované. (na druhou stranu by se Adminer docela "blýsknul" tím, že by to jako jediný uměl ;-))
P.S. A jestli bych se ještě mohla zeptat, ten 1 MB je na data samotná nebo na SQL příkaz se všim všudy?
Jakub Vrána :
Přesně tak. Ale zdá se mi to mnohem krkolomnější než uživateli říct, ať si zvýší max_allowed_packet.
1 MB je na SQL celkem.
Diskuse je zrušena z důvodu spamu.