MySQL a rozhraní ODBC

5. března 2002

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.

Mohlo by vás také zajímat

Nejnovější

1 komentář

  1. Petr Brynych

    Dub 21, 2010 v 15:13

    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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *