Hlavne menu We are sorry, but magazine AMMO is suspended. Here is just read-only access to the articles archive. Some features are removed because they were outdated, pointless in read-only (voting and pools), or it was missused by spammers (comments) etc. Now the webpages aren't maintained so when something will get broken most probably it won't be fixed at all. If you liked our magazine then please make donation with paypal so we can pay for traffic on this server.

TOP Výuka
01 Maľované krížovky 103 bodov
02 OpenGL, lákadlo 38 bodov
03 OpenGL, časť 1 21 bodov
04 Huffmanove kódovanie 19 bodov
05 Pascal, časť 1 18 bodov
06 Ako tlačiť s HP 16 bodov
07 Základy HTML časť 2 16 bodov
08 Základy HTML časť 3 13 bodov
09 Hry pre nenáročných + zdrojáky 10 bodov
10 OpenGL, úvod 8 bodov
11 Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0 7 bodov
12 OpenGL – Intermezzo 1 7 bodov
13 OpenGL povinná literatúra 6 bodov
14 Základy HTML časť 1 6 bodov
15 WinSocket Communication via VC++ 6 bodov
Najnovsie clanky
Kvalitné služby podľa skúseností iných - TopSlužby.sk
LOTR - Dve veže - Parodia - Scénka 2. časť
Neverwinter nights
Children Of Bodom-Hatebreeder
Kult Duny - 6. časť (Bonus)
Kult Duny - 5. časť (Filmy, Hry)
Dobré ráno. (morc certa, hora incerta...)
Kult Duny - 4. časť (Knihy 2/2)
Stretnutie Spoločenstva Tolkiena
GRAVE DIGGER – Knights Of The Cross
Kult Duny - 3. časť (Knihy 1/2)
Kult Duny - 2. časť (Pojmy)
Kult Duny - 1. časť (Úvod)
LOTR - Dve veže - Parodia - Scénka
Jackass
Vsetky clanky
Airsoft - Specnaz [4 clanky]
Básne [6 clankov]
Fantázia [4 clanky]
Filmy a DVD [51 clankov]
Hardware [10 clankov]
Hry [170 clankov]
Hry, návody [6 clankov]
Hudba [8 clankov]
Internet [7 clankov]
Knihy [6 clankov]
O AMME [4 clanky]
Pandemonium [10 clankov]
Poviedky [14 clankov]
Programy [18 clankov]
Rôzne [8 clankov]
Technické [3 clanky]
Úvahy [8 clankov]
Výuka [50 clankov]
Ako tlačiť s HP
Algoritmy v grafoch
Fake2
Faktúrka
Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0
Fract
HLSaver
Hry pre nenáročných + zdrojáky
Huffmanove kódovanie
IPicture2 & aggresiveoptimize.h
Maľované krížovky
OpenGL - GLWnd
OpenGL AMMO Saver
OpenGL povinná literatúra
OpenGL – Intermezzo 1
OpenGL, časť 10
OpenGL, časť 11
OpenGL, časť 12
OpenGL, časť 13
OpenGL, časť 14
OpenGL, časť 15
OpenGL, časť 16
OpenGL, časť 17
OpenGL, časť 18
OpenGL, časť 7
OpenGL, časť 8
OpenGL, časť 9
Opengl – Cloth Simulation
RenameR
SkinMagic
WinSocket Communication via VC++
Údajové štruktúry
viac...
Zábava [5 clankov]
Zdravie [15 clankov]
Celkovy pocet clankov: 407
MySQL (+ použitie Visual C++ a PHP) 
Výuka | Dna 5.9.2002 | Johny | 22 znamok, priemer 1.86 | 4041 videni | 248 WAP videni

...najznámejšia a najpopulárnejšia OPEN SOURCE databáza. Svoje miesto si vybudovala svojou univerzálnosťou, ľahkým používaním a použitím v PHP. Ak Vás niekedy zaujímalo, ako uložiť nejaké dáta a sami ste sa trápili nad spôsobom ich uloženia a reprezentácie, tak sa tým už netrápte, pretože MySQL vyrieši všetko za Vás + navyše oveľa viac...

Cieľom tohto článku bude podať základné informácie o MySQL relačnej databáze (relational database management system), vysvetliť a naučiť jednoduchý spôsob použitia MySQL. Jazyk SQL je bohatý a popísanie všetkého by zabralo vyše 2MB textu. Cieľom nie je preklad anglického manuálu, ale uvedenie začínajúcich do MySQL a ukážky na príkladoch v podobe PHP skriptu (Fredy) a programu v MS Visual C++ (Johny). Na internete je možné nájsť aj variantu pre Delphi, C++ knižnicu upravenú pre prúdy a takťiež rôzne iné užitočné programy, ktoré Vám uľahčia prácu s MySQL alebo otestujú a nastavia rôzne parametre.

Na úvod trochu všeobecne o databázach a SQL.

Pojem databáza dnes už nie je celkom neznámy pojem. Ľudia majú potrebu zhromaždovať rôzne informácie. Dnešný svet stojí na databázach, veď si len predstavte evidenciu občanov SR, alebo pacientov u doktora. Dokonca zadanie úlohy na hodine programovania na strednej škole je spraviť jednoduchú databázu, napr. v Pascale. Avšak tu študenti riešia všetko sami, od vstupu dát, výpis až po uloženie.

História databáz siaha niekedy do 60. rokov minulého storočia. Vznikajú pojmy ako databáza, entita, atribút entity a väzby medzi entitami.

Pre tých, ktorí majú nejaké pochybnosti o tom, či vedia, čo je databáza alebo nevedia, či program s ktorým pracujú náhodou nie je databáza, tu je možno neodborné, ale pre vysvetlenie najlepšie prirovnanie.
Databáza si môžete predstaviť ako súbor dát, ktorý slúži pre popísanie nejakej skutočnosti. Napríklad váš telefónny adresár. Sú tam informácie o vašich známych a ku každému máte priradené jeho číslo, prípadne nejakú poznámku. Databáza je súbor nejakých informácií, ktoré sú v nej uložené podľa nejakého kľúča, pravidla.

Napr. Tabuľka Adresár
Meno tel. čislo pozn.
Janko Hraško 0908 111 222 kamarát
Jožko Púčik 0908 222 111 spolužiak

Databáza v MySQL pozostáva z tabuliek. Tabuľka je zoskupenie informácii, ktoré sú jednotného formátu. Príklad vyššie by mohol byť tabuľka, ktorá by sa volala napríklad „Adresár“. Ak by sme si vyrobili ďaľšiu tabuľku, kde by sme si chceli evidovať napríklad nejaké poznámky, tak by sa informácie uložené v tejto tabuľke líšili od informácii v tabuľke Adresár.

Napr. Tabuľka Diár
Dátum Stretnutie
01.01.2002 o 9.00 s Jankom Hraškom
05.05.2002 o 15.00 s Jožkom Púčikom

Do tabuľky patria len informácie, ktoré tam skutočne patria. To akú informáciu do tabuľky vložíte záleží len skutočne od Vás. Samozrejme, že do tabuľky Adresár by ste boli schopný vložiť toto:
Tabuľka Adresár
Meno tel. číslo pozn.
01.01.2002 9-00 Strenutie s Jankom Hraškom

Ale zamyslite sa nad tým, prečo by ste takéto niečo robili. Celá práca by sa tým dosť zneprehľadnila a skomplikovala. Celá funkčnosť a efektívnosť databázy spočíva v tom, ako sú data usporiadané. Pre tvorbu tabuliek platia isté zásady, ktoré o chvíľu spomeniem.

Najprv však niekoľko odborných pojmov, ktoré nie sú len pre MySQL, ale platia vo všetkých databázach typu SQL – Structured Query Language.
Entita – prvok reálneho sveta, napr. stroj, človek. Každý záznam v „Adresári“ je entita.
Atributy entity – sú položky, ktoré má entita, teda všetko, čo evidujeme. Napr. pre „Adresár“ je to meno, telef. číslo a poznámka.
Väzby medzi enitami – jednotlivé informácie je možné spájať a v tom spočíva „sila“ databáz. Pospájať všetky dostupné informácie podľa potreby.

Atributy entity – ľudovo to budem nazývať položky. ( Pozor nie ponožky ;o) ) A každý záznam v tabuľke budem ľudovo volať riadok. Je to lepšie pre predstavu a nakoniec samotný MySQL jazyk má príkazy, ktoré sú pomenované práve týmto spôsobom. Samozrejme po anglicky. Riadok – row a pod.

Pre správnu tvorbu tabuľky je nutné, aby jej položky boli nedeliteľné, atomické. Teda, keď si vytvoríte položku záznam a dáte tam Janko Hraško – 0908 111 222, tak to bude zle, pretože ste spojili viac informácii do jednej položky. Najlepšie je informáciu, čo najviac rozdeliť. Napr. Meno Priezvisko tel. číslo. Pravdaže deliť to treba len do únosnej miery, ak by ste sa rozhodli pre každé písmeno mena vytvoriť položku asi by ste boli blázon.

Položka je nejaký údajový typ: číslo, reťazec, dátum, logická hodnota,...

Pre prácu s databázovými tabuľkami je užitočne, niekedy priam nutné, aby v tabuľke existovala položka, ktorá bude označená, ako PRIMÁRNY KĽÚČ. Primárny kľúč je položka, ktorá jednoznačne identifikuje každý riadok v tabuľke. Ak sú 2 riadky úplne rovnaké, tak primárny kľúč je v každom riadku iný. Ako prímárny klúč je možné zvoliť aj viacej položiek, ale tým sa len veci komplikujú. Platí zásada, že všetky informácie, teda všetky položky by mali byť závislé na primárnom kľúči. A navyše by to mala byť položka, ktorá nezaberá veľa miesta. Najlepšie, keď to bude nejaké číslo, napr. ID.

Napr. Tabuľka Zamestnanci
ID Meno Priezv Funkcia Plat
1 Janko Hraško robotník 11000

Ako prímárny kľúč by asi každý zvolil ID. Áno, je to správne. Ale tu vzniká otázka, je Plat závislý na ID čísle zamestnanca alebo na jeho funkcii, ktorú vykonáva ? Ak na funkcii, tak potom Plat nemá, čo v tejto tabuľke hľadať. Takisto môžete spraviť ďaľšiu tabuľku, ktorá sa bude volať Funkcie a kde bude ID a popis funkcie. Predstavte si napríklad, že chcete dať vypísať všetky funkcie, ktoré sa vo vašej firme vykonávajú. Ako to spravíte ? Budete to zisťovať z tabuľky zamestnacov ? Môžu vzniknúť duplikáty niektorých funkcíí. Samozrejme aj tento problém je možne odstrániť, ale len preto, že nemáte databázu dobre štruktúrovanú si vyrábate ďaľšie problémy.

Existuje ešte aj Cudzí kľúc, pomocou, ktorého sa dajú jednotlivé tabuľky pospájať. Napr. ID funkcie v tabuľke funckie z tabuľkou zamestnanov v položke funckia.

SQL sa skladá z niekoľkých častí. DDL – Data Definition Language. SDL – Storage Definition Language. VDL – View Definition Language. DML – Data Manipulation Language.
Toľko všeobecne ku SQL a databázam.

A teraz už konkrétne ku MySQL.
Asi ako prvé si položíte otázku: „Ako to celé funguje?“
Najprv však poviem ako sa dá k tomu dostať. Na http://www.mysql.com si môžete stiahnuť všetko potrebné ku MySQL. Lepšia varianta je zohnať si PHP-Home Edition, kde máte aj Apache aj MySQL. Ak ste už robili s PHP, tak viete, že na to, aby ste mohli doma odskúšať nejaký skript musíte mať spustený Apache. S MySQL je to podobné. Aby ste mohli s MySQL pracovať u Vás doma musíte spustiť MySQL server. Potom sa naň už len pripojíte a môžete pracovať, rovnako sa môžete pripojiť na ľubovolný MySQL server vo svete. Jediné, čo potrebujete je mať tam konto a vedieť heslo.
So spustením a inštalovaním MySQL servera si hlavu lámať nemusíte, pretože všetko spraví zariadi inštalačný program. V tomto balíku získate vyše 2MB anglický manuál ku MySQL, kde sa dočítate o použití a inštalácii na rôznych OS. Nájdete tu popis všetkých SQL príkazov, ich syntax a jednoduché príklady. Navyše je tu phpMyAdmin, čo je pekne spravený správca MySQL v PHP. Umožňuje Vám prehladne spravovať MySQL databázu, pridávať, meniť, mazať, robiť štatitiky,... tabuliek, užívateľov, databáz. Obsahuje podporu pre slovenský jazyk, takže vždy viete, čo robíte. Navyše zobrazuje príkaz SQL, ktorý sa akurát vykonal, takže slúži aj ako protriedok na učenie.
Pri MySQL je aj pár programov, napríklad je tu consolová aplikácia, kde si môžete cvičiť nejaké príkazy. Admin pre mysql, winadmin pre MySQL.

Prečo používať MySQL ?
Je to rýchla, spoľahlivá a ľahko použiteľná databáza. MySQL podporuje veľa operačných systémov. Slávna sa stala aj vďaka PHP. Používanie MySQL pomocou PHP je veľmi jednoduché. Podobné je to aj s Visual C++. Objavili sa aj isté modifikácie pre Delphi. API funkcie pre C, C++, Eiffel, Java, Perl, PHP, Python a Tcl. Operačné systémy AIX, BSDI, DEC, FREEBSD, Linux, Mac, NetBSD, OpenBSD, OS/2, Solaris, SunOS, SCO UnixWare, Win95, Win98, NT, Win2000

Pre použitie pod Windowsom potrebujete mať nainštalovaný TCP/IP protokol a Winsock 2, ktorý môžete nájsť na http://www.microsoft.com. Majitelia Win98 sa nemusia báť, pretože ten už obsahuje Winsock 2.

MySQL podporuje MULTI-THREAD a pobeží aj na viacprocesorových počítačoch.

MySQL momentálne nepodporuje cudzie kľúče, čo je podľa mňa skôr výhoda, ako nevýhoda, pretože tým odpadá starosť o ich vytváranie a netreba dopredu myslieť na to, ktorá tabuľka bude s ktorou spojená. MySQL sa vyvýja veľmi rýchlo a zoznam vecí, ktoré plánujú doplniť je priam obdivuhodný.

Ale podľa mna najväčšia výhoda MySQL je jej jednoduchosť použitia. Chcete dáta, pošlete príkaz, chcete vložiť pošlete príkaz. Pred MySQL som študoval ako funguje ODBC – Open Database Connectivity, čo je akési spojenie, ktoré Vám umožňuje pracovať s rôznymi typmi databáz rovnakým spôsobom.
MySQL sa mi však zdá omnoho jednoduchšie.
Ale priaznivci ODBC tiež nebudú sklamaný, pretože MySQL má aj ovládač pre ODBC, ktorý je možné stiahnuť z ich stránky www.mysql.com

Spustenie servera MySQL je jednoduché. Stačí spustiť súbor mysqld.exe alebo kliknúť na ikonku, ktorú vytvorí inštalačný program. Síce momentálne WinSQLAdmin nedokáže toho veľa, napriek tomu poskytuje pekný pohľad na aktuálny beh servera. A vždy viete, či beží alebo nie. Ak sa rozhodnete spúštať mysqld.exe, tak jeho beh môžete vidieť v procesoch. Na zhodenie servera musíte mať na to právo.

Čo sa týka použitia vo Vašich programoch alebo skriptoch potrebujete urobiť len jedno a to pripojiť sa na MySQL server. Keď už ste pripojený, tak môžete posielať na MySQL rôzne požiadavky. Pre Vás sú dôležité len 2 veci. Vedieť ako niečo poslať, a vedieť, ako prijať výsledok vašej požiadavky.

MySQL je vlastne celá založená na tabuľkách. Preto, vždy pracujete s tabuľkami. Keď vkladáte dáta, vždy ich vlastne vkladáte do tabuľky, to je asi jasné. Ale keď príjmate výsledok vašej požiadavky, napr. Daj mi všetkých, ktorých meno sa začína na „A“, tak výsledok dostanete v tabuľke. Teraz si asi hovoríte, že to je všetko pekné, ale ako to asi vyzerá v praxi ? V praxi je to závislé od jazyka, ktorý používate. Aj keď syntax príkazov je veľmi podobná, v niektorých jazykoch sú príkazy naviac. Napr. v PHP je niekoľko spôsobov, ako dostať výsledok požiadavky, zatiaľ, čo API pre C je len jedna funckia. Ale treba si tiež uvedomiť, že PHP je len skriptovací jazyk a môžete si tam dovoliť veci, ktoré v C nevykúzlite, ani keby ste boli veľmi dobrý čarodejník.

V nasledujúcej časti článku uvediem pár SQL požiadaviek, ktoré sú rovnaké pre všetky jazyky. Líši sa len spôsob, akým tú požiadavku pošlete. SQL požiadavky, po anglicky Query je vlastne reťazec. Vy ho pošlete na MySQL a MySQL na to nejakým spôsobom zareaguje, prípadne vráti výsledok.
Užitočné QUERY požiadavky:
Nič také ako connect nie je, bola by to absurdná požiadavka, keby ste chceli poslať príkaz na pripojenie ešte pred pripojením ;o)

Kľúčové slová budem písať veľkými písmenami, aj keď v MySQL na tom nezáleží. Malými písmenami budem uvádzať konkrétne mená databáz, tabuliek a položiek.

INTEGER celé číslo (-231-1 až 231)
SMALLINT celé číslo (-32768 až 32767)
NUMERIC(m,n) desat. číslo (m - počet plat. číslic, n - počet des. míst)
FLOAT(n) reálne číslo (max. 38 des. Miest, n - počet platných číslic)
CHAR(n) řetězec znaků do max. délky 255
VARCHAR(n) řetězec znaků promměnné délky
(maximální délka je větší, než u typu CHAR)
(n udává počet znaků)
DATE dátum
TIME čas

DEFAULT <hodnota> - použije se uvedená hodnota, ak užívateľ žiadnu nezadal
NOT NULL - hodnota musí být povine zadaná
PRIMARY KEY - primárny kľúč (jeho hodnota musí byť jedinečná)
UNIQUE - jedinečná hodnota (unikátna)


USE db – vyberie databázu db a nastaví ju ako default, teda všetky príkazy bude vykonávať pre túto databázu

SHOW TABLES – vráti zoznam tabuliek
SHOW DATABASES – vráti zoznam databáz
SHOW VARIABLES – vráti zoznam a hodnoty premenných MySQL
SHOW TABLES FROM db – zoznam tabuliek z databázy db
SHOW PROCESSLIST – zoznam procesov MySQL
SHOW LOGS – ukáže zoznam logov
SHOW GRANTS FOR user – práva užívateľa user
SHOW COLUMNS FROM table – vráti zoznam položiek z tabuľky table

SELECT polozka,... FROM tables,…[WHERE] [ORDER BY] [GROUP BY] – príkaz SELECT je asi najdôležitejší a najbohatší príkaz MySQL, určíte v ňom, ktoré informácie Vás zaujímajú, ktoré položky, ako ich zotriediť, prípadne zoskupiť. Má mnoho parametrov. Príklad použitia: SELECT * FROM table – vráti všetky položky tabuľky table
Pozor na toto: SELECT * FROM table1,table2 – vytvorí, čosi ako súčin, teda vráti vám tabuľku, kde bude skombinovaný každý riadok table1 s každým riadkom table2. Karteziánsky súčin množín table1, table2. Alebo tiež množina všetkých usporiadaných dvojíc x,y, kde x je z table1 a y je z table2.

CREATE DATABASE db – vytvorí databázu db
CREATE TABLE zaměstnanec
(cislo INTEGER,
meno VARCHAR(10),
...
PRIMARY KEY (cislo))


DROP DATABASE db – zruší databázu db
CREATE TABLE table (parametre) – vytvorí tabuľku table podľa parametrov, ktorých je opäť veľmi veľa.
DROP TABLE table – zruší tabuľku table
ALTER TABLE – zmena tabuľky
ALTER TABLE zamestnanec
ADD (funkcia VARCHAR(10) DEFAULT 'žiadna')

INSERT INTO table VALUES(“”,””,…)– vloženie nového riadku do tabuľky
UPDATE – zmena riadku v tabuľke

Na záver ešte sľubované použitie v PHP a Visual C++. Oba zdrojáky je možné si stiahnuť z adresy uvedenej na konci článku.

Ako prvý príklad použitia bude Visual C++. Je to jedna z funkcíí programu, ktorý sa volá MySQL benchmark. Robil som ho asi deň, pôvodný zámer bol otestovať rýchlosť pracovania s MySQL pomocou Visual C++, pomocou PHP a cez ODBC.

Toto je hlavná funkcia môjho programu, ktorá posiela požiadavky na MySQL. Má 2 parametre, prvý je reťazec typu Cstring, ktorý obsahuje SQL príkaz. A druhý je logická hodnota, či má zareagovať aj GUI prostredie na výsledok operácie. Zmysel druhého parametru je v tom, že pri teste rýchlosti by som sa výkon brzdil tým, že by sa neustále prekreslovala tabuľka výsledkov. Takto sa meria len skutočný čas, ktorý trval pre uskutočnenie požiadavky.

*****
int CMysqlDlg::StandardQuery(CString &query, BOOL all)
{
// otestuje sa, ci sme pripojeny na MySQL
if (!m_isconnected)
{
// ak nie sme, tak vypise chybu a skonci funkciu
MessageBox("NOT CONNECTED !","mySql ERROR", MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
return 0;
}

// dalej posielame samotnu SQL poziadavku
if ( mysql_query(m_mySql,query) )
{
// ak sa neporadi, tak vypiseme chybu a koncime
MessageBox(mysql_error(m_mySql),"mySql ERROR", MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
return 0;
}
// poziadavka sa podarila, vysledok ulozime do premennej m_res
m_res = mysql_store_result(m_mySql);

// ak je m_res==NULL znamena to, ze alebo poziadavka nema ziadny vysledok, napr. // prikaz USE alebo sa vyskytla chyba
if (m_res==NULL)
{
// ak sa chyba nevyskytla, tak ukoncime funkciu
if ( mysql_errno(m_mySql)==0 ) return 1;
else
{
// chyba sa vyskytla
MessageBox(mysql_error(m_mySql),"mySql ERROR", MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
return 0;
}
}

// ma zareagovat GUI na vysledok
if (!all)
{
// ak nie, tak musime uvolnit vysledok m_res
mysql_free_result(m_res);
return 1;
}

// *** Query results ***
// tato cast pokracuje len v pripade, ze poziadavka ma vysledok a nevyskytla sa chyba
// a chceme aj vidiet vysledok

unsigned int i,j=0;
LVITEM lvItem; // prvok okna – nepodstatne pre MySQL

m_list1ctrl.DeleteAllItems(); // vynulovanie okna
unsigned int numCols = m_list1ctrl.GetHeaderCtrl()->GetItemCount();
if (numCols)
for (i=0; i < numCols; i++)
m_list1ctrl.DeleteColumn(0); // vymazanie vsetkych stlpcov

// zistime pocet poloziek z vysledku
m_numfields = mysql_num_fields(m_res);
// a vsetky polozky si ulozime do premennej m_fields
m_fields = mysql_fetch_fields(m_res);

// pre kazdu polozku pridame stlpec a jeho meno podla polozky
for (i=0;i<m_numfields;i++)
m_list1ctrl.InsertColumn(i,m_fields[i].name,LVCFMT_LEFT,40);

// kym je to mozne, tak mi daj riadok
while ( m_row = mysql_fetch_row(m_res) )
{
unsigned long *lengths;

// dlzka poloziek v tomto riadku
lengths = mysql_fetch_lengths(m_res);
// pre kazdu polozku: umiestni ju do okna
for(i=0; i<m_numfields; i++)
{
lvItem.mask = LVIF_TEXT;
lvItem.iItem = j;
lvItem.iSubItem = i;
// m_row[i] je i-ta polozka v aktualne prevzatom riadku
lvItem.pszText = m_row[i];// ? m_row[i] : "NULL";
m_list1ctrl.InsertItem(&lvItem);
m_list1ctrl.SetItem(&lvItem);
}
j++;
}

// uvolnime vysledok m_res
mysql_free_result(m_res);

// a nastavime auto velkost pre vsetky polozky
for (i=0;i<m_numfields;i++)
m_list1ctrl.SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);

return 1;
// ak funckia vratila 0 – chyba
// ak 1 – vsetko bolo OK
}
*****
Teraz si este ukážeme pripojenie a odpojenie z MySQL.
Pre správne pripojenie musí byť zadané užívateľské meno a heslo, ak je treba.
*****
// pri stlaceni gombika connect
void CMysqlDlg::OnButtonconnect()
{
// daj nam data z dialogu
UpdateData(TRUE);

// ak uz spojenie existuje, tak ho zavri
if (m_mySql!=NULL) mysql_close(m_mySql);
m_isconnected=FALSE;
UpdateConnectInf();

// skus inicializovat MySQL, ak doslo ku chybe vypis ju a skonci
if ( !(m_mySql = mysql_init(NULL)) )
{
MessageBox(mysql_error(m_mySql), "mySql Error",MB_OK);
return;
}


// skus sa pripojit, ak sa nepodari, tak skonci
if ( !(mysql_real_connect(m_mySql, m_edithost, m_edituser, m_editpswd, NULL, m_editport, NULL, 0)) )
{
MessageBox(mysql_error(m_mySql), "mySql Error",MB_OK);
return;
}
m_isconnected=TRUE;
UpdateConnectInf();

}
*****
void CMysqlDlg::OnButtondisconnect()
{
// ak spojenie existuje, tak ho zrus
// a vypis info a stave spojenia
if (m_mySql!=NULL) mysql_close(m_mySql);
m_isconnected=FALSE;
m_mySql=NULL;
UpdateConnectInf();
}
*****

Toľko ku použitiu MySQL a Visual C++. Opis všetkých typov premenných, ako aj API funkcií pre C nájdete v obsiahlom MySQL manuále. (Vyše 2MB).
Program môže tiež slúžiť na testovanie rôznych SQL príkazov. Program vlastne nerobí nič prevrátné, len sprostredkúva obojsmernú komunikáciu medzi Vami a MySQL serverom cez jedno milé okienko. ;o)

A teraz sa pozrime, ako vyzerá pripojenie a posielanie MySQL príkazov v PHP (Fredy).

<?
//Nastavenia pripojenia k MySQL

//Ak MySQL server bezi na tom istom pocitaci tak daj localhost
$server="localhost";
//meno uzivatela, ak mate doma mysql a este nic v nom nenastavovali tak nahajte root
$user="root";
//na uzivatela "root" bud heslo je "" alebo "root", samozrejme ak sa pripajate na cudzi server tak zabudnite ze na roota by ste sa pripojili
$password="root";

function vypis($sql,$databaza)
{
global $mysql;

mysql_select_db($databaza,$mysql);
if ($result=mysql_query($sql,$mysql))
{
if ($num_fields=@mysql_num_fields($result))
{
//nakreslime vrch tabulky
echo("<table align="center" border="1" cellpadding="1" cellspacing="0"><tr bgcolor="black">");
while ($field=mysql_fetch_field($result))
{
echo("<td align="center"><font color="white"><b>$field->name</b></font></td>");
}
echo("</tr>");
//nakreslime vsetky riadky s datami
$j=0;
//mysql_fetch_row($result) nie je jediny sposob ako ziskat z $result jeden riadok dat, su tu este funkcie mysql_fetch_array(); mysql_fetch_object(); a ine ....
while ($row=mysql_fetch_row($result))
{
printf("<tr %s>",($j%2)?"bgcolor="#eeeeee"":"");
for ($i=0;$i<$num_fields;$i++)
{
echo("<td>$row[$i] </td>");
}

unset($i);
echo("</tr>
");
$j++;
}
// mysql_free_result($result); vlastne ani netreba pisat, po ukoncini phpcka same zanikne, tento prikaz je tu koli tomu ked sa niekto zaujima kolko pamate mu zobere nejaky sql prikaz
mysql_free_result($result);
echo("</table>");
}
}
else echo("Prikaz <b>$sql</b> som nemohol vykonat!!!<br>
");
}

function nadpis($text)
{
echo("<h1 align="center">$text</h1>
");
}

function databaza($text,$hodnota)
{
echo("<select name="$text">
");
$result=mysql_query("SHOW DATABASES");
//mysql_fetch_row($result) nie je jediny sposob ako ziskat z $result jeden riadok dat, su tu este funkcie mysql_fetch_array(); mysql_fetch_object(); a ine ....
while ($row=mysql_fetch_row($result))
{
printf("<option %s>$row[0]</option>
",($hodnota==$row[0])?"SELECTED":"");
}
// mysql_free_result($result); vlastne ani netreba pisat, po ukoncini phpcka same zanikne, tento prikaz je tu koli tomu ked sa niekto zaujima kolko pamate mu zobere nejaky sql prikaz
mysql_free_result($result);
echo("</select>");
}

echo("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html><head><title>PHP MySQL example</title></head>
<body leftmargin="2" topmargin="2">");

//premenna $mysql by bola potrebna keby sme robili v php skripte pripojenie na dva odlisne MySQLka, vtedy by bolo treba tento link identifier pouzit pri kazdej komunikacii s mysql (od kazdeho query az po odpojenie z mysql, proste vsade) aby sa vedelo rozlisit s ktorym MySQL programator chce komunikovat
$mysql=@mysql_connect($server,$user,$password)
or die("Nemoze sa pripojit k MySQL, ci je dobre nastavene pripojenie");

echo("Pripojeny na: <b>$user@$server</b><br>
");

//pripravime formular
echo("<h1 align="center">Moznosti</h1>
");
//1. Moznost
echo("<form><b>1)</b> Vykonaj SQL prikaz:<input type="text" name="sql1" value="$sql1"> na databaze: ");
databaza("databaza1",$databaza1);
echo(" <input type="submit" value="Go"></form>
");

//2. Moznost
echo("<form><b>2)</b> Ukaz tabulky z databazy: ");
databaza("databaza2",$databaza2);
echo(" <input type="submit" value="Go">
</form>
");

//3. Moznost
echo("<form><b>3)</b> Ukaz data zo vsetkych tabuliek v databaze: ");
databaza("databaza3",$databaza3);
echo(" <input type="submit" value="Go">
</form>
");

//vysledky
echo("<hr>
");

if (isset($sql1))
{
//1. Moznost splnenie SQL prikazu, ak bol zadany
nadpis("Vysledok prikazu");
vypis($sql1,$databaza1);
}
elseif (isset($databaza2))
{
//2. Moznost vypis tabuliek z databazy
nadpis("Tabulky z $databaza2");
vypis("SHOW TABLES",$databaza2);
}
elseif (isset($databaza3))
{
//3. Vsetky data z databazy
mysql_select_db($databaza3,$mysql);
if ($result=mysql_query("SHOW TABLES",$mysql))
{
//mysql_fetch_row($result) nie je jediny sposob ako ziskat z $result jeden riadok dat, su tu este funkcie mysql_fetch_array(); mysql_fetch_object(); a ine ....
while ($row=mysql_fetch_row($result))
{
nadpis("Data z $databaza3 -> $row[0]");
vypis("SELECT * FROM $row[0]",$databaza3);
}
// mysql_free_result($result); vlastne ani netreba pisat, po ukoncini phpcka same zanikne, tento prikaz je tu koli tomu ked sa niekto zaujima kolko pamate mu zobere nejaky sql prikaz
mysql_free_result($result);
}
}

echo("<br>");
//ukonecnie spojenia s MySQL, premenna $mysql nie je vobec potrebna, lebo toto je jedine pripojenie
if (mysql_close($mysql) ) echo("Odpojeny od MySQL<br>
"); else echo("Nastala chyba pri odpajani<br>
");
?>
</body>
</html>


Všetky ukážky + zdrojáky je možné stiahnuť tu:

http://www.softsklad.host.sk/c/mysql_vc_php.zip


Obr�zok - Klikni a zv�?�� sa Obr�zok - Klikni a zv�?�� sa Obr�zok - Klikni a zv�?�� sa
Najnovsie clanky od tohto redaktora