![]() |
|
||||||
|
|
| 07.02.12 / 23:17 |
|
Martin Rebane
Kõigepealt sellest, mis see MySQL on. Andmebaasiprogramm. Algajal on vast kõige lihtsam võrrelda MySQL'i MS Exceli või mõne muu tabelarvutusprogrammiga. Nii nagu Excelis on failid, mis võivad sisaldada palju tabeleid, on MySQLis andmebaasid(database), mis võivad samuti sisaldada palju tabeleid. Igal tabelil on aga read(row), mis lähevad vasakult paremale ja veerud(column), mis lähevad ülevalt alla. Tekivad lahtrid(cell). Lahtrid sisaldavad infot.MySql on siiski võimsam tööriist kui Excel ning tema tabelites ei pruugi hoida ainult sõnalist infot või numbreid vaid ka näiteks pilte jm faile. Struktuur lähemalt: (1)MySQL --(2)selles on x arv andmebaase(näiteks igale kasutajale oma) ----(3)igas database's on x arv tabeleid, milles on x arv ridasid ja x arv veerge. Kui meil oleks firma, mis tegeleb nii autoremondi, kui juurviljakasvatusega, võiks tema MySQLi struktuur olla järgmine:
Nüüd peaks juba olema tekkinud mingisugune ettekujutus sellest, misasi MySQL on. Aga kus ja kuidas? MySQLi kasutatakse tavaliselt serverites, aga selle võib vabalt installida ka Windowsiga koduarvutisse. Selle kasutamiseks on põhiliselt kaks võimalust: 1) Otse MySQL'i käsurealt 2) "Kaugjuhtimisega", antud juhul siis PHP'd kasutades. Kuna meie eesmärgiks on kasutada MySQLi koos PHP'ga, siis vaatame, kuidas PHP abil MySQLiga ühendus luua. PHP kood:
Nõndaks. Kõigepealt defineerisime serverinime(kuna mysql eeldatavasti jookseb samas masinas kus PHP'gi, on selleks localhost), mysqli kasutajanime ja passwordi ning muidugi andmebaasi nime. Need andmed oleks võinud muidugi ka otse koodi sisse kirjutada, aga PHP'ga on see hea asi, et sama koodi saab kasutada mitmel erineval lehel ja kui sellised muutujad on eraldi defineeritud, siis on koodi teisel lehel kasutamine mõne sekundi küsimus, muidu peaksime hakkama kõigepealt koodi uuesti läbi lugema/mõtlema. Ühendus olemas, mis nüüd? Ilmselt oleks tark endale alustuseks tabel teha, selleks paneme kõigepealt kokku MySQL'i käsu ja seejärel käsime PHP'l selle täita: PHP kood:
Nüüd peaks meil, kui kõik sujus, tabel olemas olema. $sqlcmd="create table minu_raamat(ehk tee tabel nimega minu_raamat... ...kuhu sisse pane esimeseks veeruks 'id', mis on number ning primary key(kõige tähtsam veerg tabelis, unikaalse väärtusega) ja not null, st. ei tohi olla ilma väärtuseta. teine veerg on nimega pealkiri, tegu on lühikese teksijupiga, mille suurus on kuni 255 märki. see veerg on juba tõsine tekst, kus tähemärke juba kümnete tuhandetega lubatud. veerg nimega kuupäev, mille formaat on datetime ehk siis nt 2001-03-05 22:08:36, kui on soov ainult kuupäeva või aega lisada, siis tuleks veeru tüüpideks panna vastavalt date ja time. Järgmine rida lisab tablisse veeru nimega telefon, millesse võib sisestada kuni seitsmekohalise numbri. Tabel ongi olemas! Paneme sinna veidi infi kah sisse! Tavaliselt tuleb see inf kasutajalt, nt kui ta täidab ära mingi form'i: Nüüd kasutame oma suurepärast kujutlusvõimet ja kujutame ette, see meil on fail nimega sisestaja.php, milles sama kood, mis oli ka lehel, millega tabeli tegime, aga selle vahega, et $sqlcmd'i väärtus on teine: PHP kood:
Ehk eesti keeles: Sisesta tabelisse minu_raamat väärtused: 0 - sellepärast, et selle veeru tähistasime me flagiga auto_increment, mis lisab iga kord automaatselt uue väärtuse, mis on ühe võrra suurem, kui eelmine, mis lisati. Ise me selle väärtust määrama ei pea. $_POST['pealkiri'] ja $_POST['kommentaar'] - eelmine formiga fail saatis meile muutujad $_POST['kommentaar'] ja $_POST['pealkiri'] (form'i elementide nimede järgi), need me siia lisamegi. now() - see funktsioon sisestab automaatselt käesoleva ajahetke meie datetime veergu. $_POST['telefon'] - sisestab telefoni, kusjuures telefon võib koosneda ainult numbritest ja mitte rohkem kui seitsmest numbrist, (seitse on näite illustreerimiseks, päriselt soovid sa võib-olla pikemat numbrit kasutada.) Juhul, kui on rohkem numbreid, sisestatakse ainult 7 esimest. Juhul kui proovime sinna lisada ka muid tähemärke peale numbrite... vaata ise mis juhtub.. ei midagi ohtlikku :) Juhul, kui tekst sisaldab märke, mida mysql võiks käsitleda valesti, tuleb need taandada. Seda saab teha lihsalt: ja kõik ohtlikud märgid "tehakse kahjutuks". Nt Kaupo "Kaups" Kapsas sisestatakse MySql tabelisse nii: Kaupo \"Kaups\" Kapsas. Sealt välja võttes ja näiteks echo abil veebilehel kuvades tuleks need muidugi ära võtta: stripslashes($muutuja) ja tagurpidi kaldkriipsud ongi kadunud... Lõplik sisestuskood näeks siis välja nii: PHP kood:
Aga milleks punktid ja jutumärgid? Nimelt $sqlcmd on string ning me ei saa selle sees funktsioone käivitada. Selleks tuleb stringi tekstiosa korraks jutumärgiga kinni panna, selle järgi panna stringile otsa lisamise märk, milleks on punkt ja alles nüüd lisame funktsiooni, mis töötleb muutujat( addslashes($muutuja) ). Nüüd vastupidises järjekorras paneme punkti, mis tähendab, et liidame stringile veel mingi osa, ning jutumärgid tähistamaks, et liidetav osa on tekst mitte mingi funktsioon ega muutuja. Lihtne. Info on tabelis. Võtame ta sealt välja! PHP kood:
$sqlcmd on jälle see käsk, mille me MySqlile anname: vali kõik lahtrid tabelist minu_raamat ja järjesta nad kuupaev'a järgi Juhtub see, et valitakse kõik read(kuna me ei seadnud sellele mingisugust piirangut) ja kõik lahtrid(kuna selecti järgi on '*'). Muutujasse $result kogume me selle kraami, mis mysql_query() meile tagasi andis - vastused. Ehk vastuste(muutuja $result'i) saamiseks käivitame funktsiooni mysql_query ja esitame sellega päringu, mille me panime enne kirja muutujasse $sqlcmd. Niikaua, kuni jätkub vastuseridasid muutujas $result, võtame me need sealt ükshaaval, kasutades funktsiooni mysql_fetch_row(), välja ja paneme iga kord muutujasse $myrow. Seni on kõik siin näites vaadeldud muutujad olnud ühe väärtusega, nt $kala="ahven", aga nüüd seisame me olukorra ees, kus meil tekib array. Ehk ühes muutujas on meil hulk vastuseid. Näide: kui meil on mitu kala siis: $kala = array(ahven, haug, räim); Samamoodi on meil nüüd ka muutuja $myrow, ainult selle vahega, et kalade asemel ujuvad seal '0', '1', '2', '3', '4' ehk 'id', 'pealkiri', 'kommentaar', 'kuupaev' ja 'telefon'. Nüüd selleks, et saada sealt kätte nt telefoninumbrit: ...ja meile trükitakse välja telefoninumber. Aga kuna me töötlesime need andmebaasi pannes addslashes() funktsiooniga, siis oleks otstarbekas need "slashid" nüüd ära võtta: Või kui me kasutame seda teksti sees, siis: Nüüdseks tuli meile ju muidugi juba meelde ka tõsiasi, et me tegime ilmaasjata tööd, kuna 'telefon'-lahtris saavad olla ainult numbrid ja mingeid muid märke, ammugi siis kurakaldkriipse, me sinna lisada ei saa ;) Kui numbritega jamamine on liiga segane, siis kasuta mysql_fetch_row() asemel funktsiooni mysql_fetch_array(), mis paneb väärtused rivvi ka nimede järgi, niiet $myrow[4] asemel saame kasutada $myrow["telefon"], kusjuures sulgudes olev väärtus on mysqli tabeli veeru nimi. Aga kui meil on vaja kõigest pealkirja ja telefoni? Siis muudame lihtsalt mysqli päringut: ooops..meelest läks - meil oli tegelikult vaja ainult neid artikleid, mille autorid teenivad oma igapäevast leiba sinises kuues.. Nüüd saame me kõikidest ridadest, kus telefon on 110, kätte pealkirja ja telefoni. Ehk kõik see värk koos näeks välja nii: PHP kood:
See, kes asjale pihta sai, võib selle imelihtsa koodi baasil endale - väikeste muudatustega muidugi - suurepärase guestbook'i kirjutada. Niih. Hulga juttu jälle "paberil". Kõik arvamused oodatud kommentaaride veergu ja küsimused foorumisse :) |martin| Artikli kommentaarid |
|