MySQL a rozhraní ODBC

    1

    MySQL podporuje ODBC díky MyODBC. Jak nainstalovat MyODBC? Jaký je účel ODBC pro MySQL? Jak pracovat s ODBC v PHP skriptu?

    Možná znáte MySQL PHP API, s jehož pomocí se PHP skript připojuje k poskytovateli dat a které je součástí PHP. Dalším příkladem budiž třeba MySQL C API, které přilinkujete při sestavování aplikace. Práce s PHP a C API je rozdílná, příkazy jsou odlišné. Existuje také univerzální rozhraní ODBC (Open Database Connectivity), se kterým by se mělo (dle norem) pracovat stejně pro libovolný SQL server (norma na jazyk SQL v rámci ODBC) i pro libovolnou ODBC-schopnou aplikaci.

    MyODBC je 32bitový ODBC ovládač pro připojení jakékoli ODBC-schopné aplikace k MySQL. MyODBC spolehlivě funguje na Windows95, Windows98/SE/ME, NT, 2000, XP a na většině Unixových platformách. Běžně se MyODBC používá pro Access, VBA, Excel, Word, Delphi, ASP, Cold Fussion ad. Tedy pokud plánujete používat stránky ASP, musíte nainstalovat také toto rozhraní.

    Obecně o ODBC

    ODBC slouží jako mezičlánek pro spojení klientské aplikace a databázového serveru. Přístup přes rozhraní ODBC je unifikovaný, tj. ze strany klienta se k němu přistupuje pořád stejným způsobem, nezávisle na tom, s jakým databázovým serverem pracujete. Dřívější verze ODBC tvořily jen jakýsi mezistupeň mezi aplikací a nativními ovladači databázového serveru. V současnosti takovéto ztráty výkonnosti nehrozí, neboť i ODBC přistupuje přímo.

    Download a nastavení

    Distribuce MyODBC jsou vystaveny v download sekci oficiální prezentace www.mysql.cz. Zvolte si samozřejmě operační systém (Windows nebo Linux) a jeho verzi. Můžete si také stáhnout zdrojové soubory a sestavit si binární distribuci sami. Vzhledem k problémům vyskytujícím se u ODBC na Linuxu a malé oblíbenosti tohoto řešení se budu dále věnovat jen operačním systémům rodiny Windows.

    Parametry přístupu se nastavují v Ovládacích panelech (Windows 95 a vyšší), resp. Nástrojích pro správu (Windows NT a vyšší). Zvolte ODBC data source administrator. Existují Uživatelská DSN (User DSN) a Systémová DSN (System DSN). K uživatelským má přístup jen přihlášený uživatel, který je nastavil a v rámci lokálního počítače. Zdroje dat (DSN = data source name) tedy budete registrovat jako systémové, které jsou k dispozici všem uživatelům včetně služeb technologie NT.

    MyODBC1

    V záložce System DSN se objeví všechny již nastavené systémové zdroje dat. Stiskněte Add pro přidání dalšího.

    MyODBC2

    Zvolte MySQL. Nastavení jiných ovladačů je velice podobné.

    MyODBC3

    Widnows DSN name – název datového zdroje. Doporučuji zvolit stejný jako název databáze.
    MySQL host – název nebo IP adresa počítače, na kterém běží MySQL.
    MySQL database name – název databáze, ke které se bude přistupovat.
    User – uživatelské jméno, pod kterým se bude s databází pracovat. Pokud jej vyplníte, bude vždy právě s ním daný datový zdroj spojen.
    Password – heslo uživatele, který je uveden v User. Pokud uvedete také heslo, budou se ODBC-schopné aplikace moci připojit bez jakékoli autentizace se všemi z toho plynoucími výhodami i nebezpečími.
    Port (if not 3306) – jestliže server běží na jiném, než výchozím portu.
    SQL command on connect – ihned po připojení k poskytovateli dat se vykoná zde zapsaný SQL příkaz.
    Options that affects the behaviour of MyODBC – zde pro každý datový zdroj zvlášť můžete ovladač konfigurovat. Změny výchozích nastavení nejsou v drtivé většině případů nevyhnutelné. Odkazuji vás proto na originální dokumentaci MyODBC.

    MyODBC a ASP

    Stránky ASP pracují s datovými zdroji pomocí rozhraní ODBC.

    <%
    Set sqlspojeni = Server.CreateObject(„ADODB.Connection“) // vytvoření objektu pro spojení s datovým zdrojem
    sqlspojeni.Open „DSN=interval“,“redaktor“,“heslo_redaktora“ // vytvoření spojení s datovým zdrojem
    Set sqlvysledek = Server.CreateObject(„ADODB.Recordset“) // vytvoření objektu pro výsledky SQL příkazů
    sqlvysledek.open „SELECT clanek FROM clanky“, sqlspojeni // vykonání SQL příkazu
    sqlpocet = sqlvysledek.RecordCount // vrací počet záznamů výsledku
    Response.write „Počet záznamů:“
    Response.write sqlpocet
    Do Unit sqlvysledek.EOF // nachází se na posledním záznamu ve výsledku
      Response.write sqlvysledek.fields(„clanek“) // výpis záznamu výsledku
      sqlvysledek.MoveNext // přechod na další záznam ve výsledku
    Loop
    sqlvysledek.close // uvolnění výsledku SQL příkazu
    Set sqlvysledek = Nothing // zrušení objektu pro výsledky SQL příkazů
    sqlspojeni.close // uzavření spojení s datovým zdrojem
    Set sqlspojeni = Nothing // zrušení objektu pro spojení s datovým zdrojem
    %>

    MyODBC a PHP

    Krátký příklad ukazuje rozdíl v nejvíce používaných příkazech a programových strukturách mezi nativním a ODBC ovladačem pro připojení skriptu PHP k databázi MySQL.

    <?
    $odbc_connection = ODBC_Connect(„interval“,“redaktor“,“heslo_redaktora“); // vytvoření spojení s datovým zdrojem
    $odbc_record_set = ODBC_Exec($odbc_connection, „SELECT clanek FROM clanky“); // vykonání SQL příkazu
    $odbc_record_count = ODBC_Num_Rows($odbc_record_set); // vrací počet záznamů výsledku
    echo „Počet záznamů:“;
    echo $odbc_record_count;
    while(ODBC_Fetch_Row($odbc_record_set)): // načtení jednoho záznamu výsledku
      echo ODBC_Result($odbc_record_set, „clanek“); // získání jedné položky z aktuálního záznamu výsledku
    endwhile;
    ODBC_Free_Result($odbc_record_set); // uvolnění výsledku z paměti
    ODBC_Close($odbc_connection); // uzavření spojení s datovým zdrojem
    ?>

    Bezproblémové změny

    Kdykoli se rozhodnete změnit databázový server např. z MySQL na něco výkonnějšího, např. Microsoft SQL Server, nemusíte v případě Microsoft Active Server Pages své ASP stránky vlastně ani měnit. V případě PHP skriptů, které používají nativní ovladače by to bylo podstatně horší. Pokud však přejdete i v PHP na ODBC, změny jsou také bezproblémové.

    Starší komentáře ke článku

    Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

    1 Příspěvěk v diskuzi

    1. Dobrý den. Nevíte, prosím, jak pomocí rozhraní ODBC poslat do MySQL inrmaci o kódování v češtině? Mám databázi v MySQL utf8 a MSSQL do ní posílá data a jsou tam chybně české znaky. Lze nastavit, aby MSSQL poslal informaci, že text je například v cp1250?Děkuji za pomoc

    Odpovědět