Týden se sešel s týdnem a my se po krátké exkursi do světa CGI podíváme skokem z Perlu rovnou na nejlepšího přítele MySQL, PHP. Ukážeme si základní praktiky při spojení těchto dvou fenoménů namísto obecného úvodu, takže je co číst.
Tento díl našeho seriálu měl být původně o zpracovávání dat z databáze MySQL skrze skript CGI přes DBI, abychom si mohli udělat detailnější náhled na rozdíly mezi Perlem a PHP, rozhodl jsem se pro malou odbočku do světa PHP aby bylo na čems "stavět". Nejprve si tedy povíme a ukážeme základy práce s PHP a MySQL. K tomu nám postačí tento díl. V tom dalším si poté paralelně ukážeme tvorbu jednoho skriptu v Perlu i PHP a výsledkem bude, což mohu prozradit s ohledem na to, že kvality PHP nejsou žádným veřejným tajemstvím, následování seriálu o PHP a výstavba našeho vlastní systému firemní aplikace pro správu běžných denních událostí ve firmě. Perlu se tedy budeme věnovat ještě příště, protože by bylo zbytečné se těmi stejnými problémy a následně rozdíly u Perlu a PHP zabývat odděleně, pokud chceme zvolit pro nás vhodnějšího partnera pro pole vývoje webových aplikací.
Spuštěné info o PHP na našem serveru.
Vracíme se k PHP
Personal Home Page - PHP, to je dnes ve všech pádech skloňovaná zkratka. Proč? Tato zjednodušená forma Perlu nemusí být pouze jako CGI, ale i v klasickém HTML generovaném pojetí. Obsahuje výkonnou knihovnu funkcí a programování aplikací API s možností použití coby mezičlánku na serveru. V současnosti nejužívanější verzí je PHP 4. Stavba stránky s PHP je jednoduchá, kód s označením PHP se provede na serveru před vygenerováním výsledné stránky dle kódu PHP, HTML zůstane HTML. Nejjednodušším způsobem aplikace PHP v dokumentech jsou tzv. short tagy <? a ?> , do nichž je kód uzavírán. Nyní se už ale pojďme věnovat základům MySQL a PHP.
Ukázka zdrojového kódu PHP a MySQL.
V následující tabulce si vyjádříme přehled funkcí v PHP pro práci s MySQL.
Název funkce |
Popis |
Mysql_connect |
Otevře připojení k serveru MySQL. |
Mysql_pconnect |
Otevře trvalé připojení k serveru MySQL. |
Mysql_select_db |
Vybere databázi MySQL. |
Mysql_close |
Zavře připojení k serveru MySQL. |
Mysql_change_user |
Změní identitu přihlášeného uživatele bez nutnosti dalšího aktivního připojení. |
Mysql_drop_db |
Odstraní databázi MySQL. |
Mysql_db_query |
Odešle dotaz a určený server MySQL. |
Mysql_query |
Odešle dotaz na již vybraný server MySQL. |
Mysql_fetch_array |
Načte řádek výsledné sady jako asociativní pole. |
Mysql_result |
Vrátí výsledek dotazu. |
Mysql_fetch_row |
Vrátí řádek vybrané sady jako výpočtové pole. |
Mysql_affected_rows |
Vrátí počet ovlivněných řádků operací INSERT, UPDATE nebo DELETE. |
Mysql_num_rows |
Vrátí počet řádků ve výsledné sadě. |
Mysql_fetch_field |
Vrací pole tabulky (sloupec) jako objekt. |
Mysql_fetch_lengths |
Vrací délku každého pole (sloupce) výsledné sady. |
Mysql_fetch_object |
Vrací řádek vysledné sady jako objekt. |
Mysql_field_name |
Vrací název určeného pole (sloupce) výsledné sady. |
Mysql_list_fields |
Vrací seznam polí určené sady. |
Mysql_num_fields |
Vrací počet polí (sloupců) výsledné sady. |
Mysql_field_seek |
Nastavuje ukazatel výsledné sady na index vybraného pole (sloupce). |
Mysql_field_type |
Vrací datový typ vybraného pole (sloupce) výsledné sady. |
Mysql_field_flags |
Vrací příznaky přidružené k určitému poli výsledné sady. |
Mysql_insert_id |
Vrací identifikátor ID generovaný předchozí operací INSERT. |
Mysql_data_seek |
Přesouvá interní ukazatel sady záznamů. |
Mysql_free_result |
Uvolní paměť přidělenou výsledné sadě. |
Mysql_errno |
Vrací číslo chybové zprávy z předchozí operace MySQL. |
Mysql_error |
Vrací text chybové zprávy z předchozí operace MySQL. |
Mysql_list_dbs |
Vrací seznam databází dostupných prostřednictvím vybraného serveru MySQL. |
Mysql_list_tables |
Vrací seznam dostupných tabulek v rámci vybrané databáze MySQL. |
Mysql_field_len |
Vrací délku vybraného pole (sloupce) tabulky. |
Mysql_field_table |
Vrací název tabulky, která obsahuje dané pole (sloupec). |
Mysql_tablename |
Vrací název tabulky daného pole (sloupce). |
Pro správu databází MySQL se používá PHPMyAdmin, zde v anglické verzi.
Samotné PHP a MySQL v akci
Základním krokem je vždy připojení k databázi. K tomu nám slouží příkaz mysql_connect s touto syntaxí:
Mysql_connect([názevhostitele[:port][:/cesta/k/socketu]], uživatelské jméno, heslo);
V praxi se používá třeba toto:
$connection = mysql_connect("localhost", $user, $heslo);
Tvorba nové databáze je dle následujícího modelu:
$createdb = mysql_create_db("moje");
A abychom mohli plnohodnotně klást dotazy SQL, použijeme dle tohoto návodu příkaz mysql_query:
Mysql_Query(dotaz[, identifikátorpřipojení]);
@$query = mysql_query("SELECT ID FROM Users ORDER BY ID DESC limit 20,40");
if(!$query):
echo"Tak to nevyšlo..";
endif;
Jak si pozorný čtenář všiml, doplnil jsem vykonání příkazu i o kontrolu jeho provedení formou výstupu hodnoty boolean o chybovosti. Další úkonem při práci s databází je její zvolení:
Mysql_select_db(názevdatabáze[, identifikátorpřipojení]);
Mysql_select_db("Users");
Na závěr dnešní lekce se podíváme na tvorbu tabulek a lepší pojetí správy chyb v našich skriptech. Tabulky tvoříme přes příkaz SQL dle tohoto modelu:
@$query = mysql_query("CREATE TABLE Users(ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Jmeno VARCHAR(85),
Prijmeni VARCHAR(150),
Vek INT,
Vytvoreno DATE)");
Abychom si naše prozatím lehké ukázky PHP a MySQL trošinku okořenili, ukážeme si správu chyb dotazů SQL:
$sql="CREATE TABLE Users(ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Jmeno VARCHAR(85),
Prijmeni VARCHAR(150),
Vek INT,
Vytvoreno D
ATE)";
If($query = mysql_query("$sql")):
Echo "Vyšlo to:)..";
Else:
Echo "Chyba číslo: ".mysql_errno()."<br>Popis chyby: ".mysql_error();
Endif;
Nejprve si do proměnné uložíme sql dotaz, ten poté vyvoláme v rámci podmínkové cyklu if, který když se příkaz nevykoná správně vypíše důvod našeho nezdaru. Pro dnešek bychom povídání o MySQL skončili a příště se podívám již na rozdíly mezi zpracování dat v Perlu a PHP. Dnes se rozloučíme stylově, náhledem na PHP diskusi, kterou si brzo také vytvoříme :-).
Diskuse v PHP.