Professional Documents
Culture Documents
Adatbázisok Kezelése - MySQL
Adatbázisok Kezelése - MySQL
Adatbázisok Kezelése - MySQL
RA
Adatbzisok kezelse MySQL
A PHP nyelv egyik meghatroz tulajdonsga, hogy nagyon knnyen kpes adatbzisokhoz csatlakozni s azokat kezelni. Ebben az rban elssorban a MySQL adatbzisokkal foglalkozunk, de amint majd szre fogjuk venni, a PHP ltal tmogatott sszes adatbzist hasonl fggvnyek segtsgvel rhetjk el. Mirt esett a vlaszts ppen a MySQL-re? Mert ingyenes, ugyanakkor nagyon hatkony eszkz, amely kpes megfelelni a vals feladatok ltal tmasztott ignyeknek is. Az sem elhanyagolhat szempont, hogy tbbfle rendszerhez is elrhet. A MySQL adatbziskiszolglt a http://www.mysql.com cmrl tlthetjk le. Ebben az rban a kvetkez tmkkal foglalkozunk: Megnznk nhny SQL pldt. Csatlakozunk egy MySQL adatbziskiszolglhoz. Kivlasztunk egy adatbzist. Tanulunk a hibakezelsrl. Adatokat visznk fel egy tblba.
212
12. ra Adatokat nyernk ki egy tblbl. Megvltoztatjuk egy adattbla tartalmt. Megjelentjk az adatbzis szerkezett.
Adatbzisok kezelse MySQL A mezneveket az els, zrjelek kzti kifejezssel adjuk meg, mg az rtkeket a megfelel sorrendben a msodik zrjelpr kztt soroljuk fel. A tblbl az sszes adatot a SELECT paranccsal kaphatjuk meg: SELECT * FROM entablam; A * szoksos helyettest karakter, jelentse az sszes mez. Ha nem az sszes mez tartalmt akarjuk lekrdezni, rjuk be az rintett mezk neveit a csillag helyre: SELECT kor, keresztnev FROM entablam; Mr ltez bejegyzst az UPDATE paranccsal mdosthatunk. UPDATE entablam SET keresztnev = 'Gbor'; Az utasts az sszes sorban "Gbor"-ra mdostja a keresztnev mez tartalmt. A WHERE zradkkal leszkthetjk a SELECT s UPDATE parancsok hatskrt. Pldul: SELECT * FROM entablam WHERE keresztnev = 'Gbor'; Ez az utasts csak azokat a sorokat rja ki, amelyekben a keresztnev mez rtke "Gbor". A kvetkez plda csak azokban a sorokban vltoztatja "Gbor"-ra a keresztnev mez rtkt, ahol a vezeteknev mez a "Szakcs" karakterlncot tartalmazza. UPDATE entablam SET keresztnev = "Gbor" WHERE vezeteknev = = "Szakcs"; Az SQL-rl tovbbi informcikat tallunk Ryan K. Stephens s szerztrsai Teach Yourself SQL in 21 Days cm knyvben.
213
12
Csatlakozs a kiszolglhoz
Mieltt elkezdhetnnk dolgozni az adatbzissal, csatlakoznunk kell a kiszolglhoz. A PHP-ben erre a mysql_connect() fggvny szolgl. A fggvny hrom karakterlncot vr paramterknt: a gazdagp nevt, a felhasznl nevt s a jelszt. Ha ezek egyikt sem adjuk meg, a fggvny felttelezi, hogy a krs a localhost-ra (azaz a helyi gpre) vonatkozik s felhasznlknt a PHP-t futtat felhasznlt, jelszknt pedig egy res karakterlncot ad t. Az alaprtelmezs
214
12. ra a php.ini fjlban fellbrlhat, de egy prblkozsra sznt kiszolglt kivve nem blcs dolog ezzel prblkozni, ezrt a pldkban mindig hasznlni fogjuk a felhasznlnevet s a jelszt. A mysql_connect() fggvny siker esetn egy kapcsolatazonostt ad vissza, amelyet egy vltozba mentnk, hogy a ksbbiekben folytathassuk a munkt az adatbziskiszolglval. Az albbi kdrszlet a mysql_connect() fggvny segtsgvel kapcsoldik a MySQL adatbziskiszolglhoz. $kapcsolat = mysql_connect( "localhost", "root", "jelszo" ); if ( ! $kapcsolat ) die( "Nem lehet csatlakozni a MySQL kiszolgalohoz!" ); Ha a PHP-t az Apache kiszolgl moduljaknt hasznljuk, a mysql_pconnect() fggvnyt is hasznlhatjuk az elzekben megadott paramterekkel. Fontos klnbsg a kt fggvny kztt, hogy a mysql_pconnect()-tel megnyitott adatbziskapcsolat nem sznik meg a PHP program lefutsval vagy a mysql_close() fggvny hatsra (amely egy szoksos MySQL kiszolglkapcsolat bontsra szolgl) , hanem tovbbra is aktv marad s olyan programokra vrakozik, amelyek a mysql_pconnect() fggvnyt hvjk. Ms szval a mysql_pconnect() fggvny hasznlatval megtakarthatjuk azt az idt, ami egy kapcsolat felptshez szksges s egy elzleg lefutott program ltal hagyott azonostt hasznlhatunk.
Az adatbzis kivlasztsa
Miutn kialaktottuk a kapcsolatot a MySQL dmonnal, ki kell vlasztanunk, melyik adatbzissal szeretnnk dolgozni. Erre a clra a mysql_select_db() fggvny szolgl, amelynek meg kell adnunk a kivlasztott adatbzis nevt s szksg szerint egy kapcsolatazonost rtket. Ha ez utbbit elhagyjuk, automatikusan a legutoljra ltrehozott kapcsolat helyettestdik be. A mysql_select_db() fggvny igaz rtket ad vissza, ha az adatbzis ltezik s jogunk van a hasznlatra. A kvetkez kdrszlet a pelda nev adatbzist vlasztja ki. $adatbazis = "pelda"; mysql_select_db( $adatbazis ) or die ( "Nem lehet megnyitni a kvetkez adatbzist: $adatbazis" );
215
Hibakezels
Eddig ellenriztk a MySQL fggvnyek visszatrsi rtkt s hiba esetn a die() fggvnnyel kilptnk a programbl. A hibakezelshez azonban hasznosabb lenne, ha a hibazenetek valamivel tbb informcit tartalmaznnak. Ha valamilyen mvelet nem sikerl, a MySQL bellt egy hibakdot s egy hibazenetet. A hibakdhoz a mysql_errno(), mg a hibazenethez a mysql_error() fggvnnyel frhetnk hozz. A 12.1 plda az eddigi kdrszleteinket teljes programm kapcsolja ssze, amely kapcsoldik az adatbziskezelhz s kivlasztja az adatbzist. A hibazenetet a mysql_error() fggvnnyel tesszk hasznlhatbb.
12
216
12. ra Ha az $adatbazis vltoz rtkt mondjuk "nincsmeg"-re mdostjuk, a program egy nem ltez adatbzist prbl meg elrni. Ekkor a die() kimenete valami ilyesmi lesz: Nem lehet megnyitni a nincsmeg adatbzist: Access denied for user: 'jozsi@localhost' to database 'nincsmeg'
217
12
Vegyk szre, hogy nem adtunk rtket az azonosito meznek. A mez rtke automatikusan nvekszik az INSERT hatsra. Termszetesen minden esetben, amikor a bngszben jratltjk a 12.2 pldaprogramot, ugyanaz a sor addik hozz a tblhoz. A 12.3 plda a felhasznl ltal bevitt adatot tlti be a tblba.
218
12. ra
219
12.3.program (folytats)
35: return false; 36: } 37: $parancs = "INSERT INTO tartomanyok ( tartomany, nem, email ) 38: VALUES ( '$tartomany', '$nem', '$email' )"; 39: if ( ! mysql_query( $parancs, $kapcsolat ) ) 40: { 41: $dbhiba = mysql_error(); 42: return false; 43: } 44: return true; 45: } 46: 47: function urlap_keszit() 48: { 49: global $PHP_SELF; 50: print "<form action=\"$PHP_SELF\" method=\"POST\">\n"; 51: print "A kvnt tartomny<p>\n"; 52: print "<input type=\"text\" name=\"tartomany\"> "; 53: print "Email cm<p>\n"; 54: print "<input type=\"text\" name=\"email\"> "; 55: print "<select name=\"nem\">\n"; 56: print "\t<option value=\"N\"> N\n"; 57: print "\t<option value=\"F\"> Frfi\n"; 58: print "</select>\n"; 59: print "<input type=\"submit\" value=\"Elkld\">\n</form>\n"; 60: } 61: ?> 62: </body> 63: </html>
12
A tmrsg rdekben a 12.3. pldbl kihagytunk egy fontos rszt. Megbztunk a felhasznlkban: semmilyen formban nem ellenriztk a felhasznl ltal bevitt adatokat. Ezt a feladatot a 17. rban trgyalt karakterlnckezel fggvnyekkel vgezhetjk el. Meg kell jegyeznnk, hogy a berkez adatok ellenrzse mindig fontos feladat, itt csak azrt maradt el, mivel gy jobban sszpontosthattunk az ra tmjra.
220
12. ra Ellenrizzk a $tartomany, $nem s $email vltozkat. Ha megvannak, nyugodtan feltehetjk, hogy a felhasznl adatokat kldtt az rlap kitltsvel, gy meghvjuk az adatbazis_bovit() fggvnyt. Az adatbazis_bovit()-nek ngy paramtere van: a $tartomany, a $nem s az $email vltozk, illetve a $dbhiba karakterlnc. Ez utbbiba fogjuk betlteni az esetlegesen felbukkan hibazeneteket, gy hivatkozsknt kell tadnunk. Ennek hatsra ha a fggvnytrzsn bell megvltoztatjuk a $dbhiba rtkt, a msolat helyett tulajdonkppen az eredeti paramter rtkt mdostjuk. Elszr megksrlnk megnyitni egy kapcsolatot a MySQL kiszolglhoz. Ha ez nem sikerl, akkor hozzrendelnk egy hibaszveget a $dbhiba vltozhoz s false rtket visszaadva befejezzk a fggvny futst. Ha a csatlakozs sikeres volt, kivlasztjuk a tartomany tblt tartalmaz adatbzist s sszelltunk egy SQL utastst a felhasznl ltal kldtt rtkek felhasznlsval, majd az utastst tadjuk a mysql_query() fggvnynek, amely elvgzi az adatbzisban a kvnt mveletet. Ha a mysql_select_db() vagy a mysql_query() fggvny nem sikeres, a $dbhiba vltozba betltjk a mysql_error() fggvny ltal visszaadott rtket s false rtkkel trnk vissza. Minden egyb esetben, vagyis ha a mvelet sikeres volt, true rtket adunk vissza. Miutn az adatbazis_bovit() lefutott, megvizsgljuk a visszatrsi rtket. Ha true, az adatok bekerltek az adatbzisba, gy zenetet kldhetnk a felhasznlnak. Egybknt ki kell rnunk a bngszbe a hibazenetet. Az adatbazis_bovit() fggvny ltal visszaadott $dbhiba vltoz most mr hasznos adatokat tartalmaz a hiba termszett illeten, gy ezt a szveget is belefoglaljuk a hibazenetbe. Ha a kezdeti if kifejezs nem tallja meg a $tartomany, $nem vagy $email valamelyikt, feltehetjk, hogy a felhasznl nem kldtt el semmilyen adatot, ezrt meghvunk egy msik ltalunk rt fggvnyt, az urlap_keszit()-et, amely egy HTML rlapot jelent meg a bngszben.
Adatbzisok kezelse MySQL egy kapcsolatazonost paramtert, amelyet elhagyva a fggvny alaprtelmezs szerint a legutoljra ltrejtt MySQL kapcsolat azonostjt hasznlja. gy ha meg akarjuk mondani a felhasznlnak, hogy milyen azonost alatt rgztettk az adatait, az adatok rgztse utn kzvetlenl hvjuk meg a mysql_insert_id() fggvnyt. $parancs = "INSERT INTO tartomanyok ( tartomany, nem, email ) VALUES ( '$tartomany', '$nem', '$email' )"; mysql_query( $parancs, $kapcsolat ); $azonosito = mysql_insert_id(); print "Ksznjk. Az n tranzakci-azonostja: $azonosito. Krjk jegyezze meg ezt a kdot.";
221
Adatok lekrdezse
Miutn adatainkat mr kpesek vagyunk az adatbzisban trolni, megismerkedhetnk azokkal a mdszerekkel, amelyek az adatok visszanyersre szolglnak. Mint bizonyra mr nyilvnval, a mysql_query() fggvny hasznlatval ki kell adnunk egy SELECT utastst. Az azonban mr korntsem ilyen egyszer, hogyan jutunk hozz a lekrdezs eredmnyhez. Nos, miutn vgrehajtottunk egy sikeres SELECT-et, a mysql_query() visszaad egy gynevezett eredmnyazonostt, melynek felhasznlsval elrhetjk az eredmnytblt s informcikat nyerhetnk rla.
12
222
12. ra
A mysql_query() fggvny egy eredmnyazonostt ad vissza. Ezt tadjuk a mysql_num_rows() fggvnynek, amely megadja a sorok szmt.
Az eredmnytbla elrse
Miutn vgrehajtottuk a SELECT lekrdezst s az eredmnyazonostt troltuk, egy ciklus segtsgvel frhetnk hozz az eredmnytbla soraihoz. A PHP egy bels mutat segtsgvel tartja nyilvn, hogy melyik sort olvastuk utoljra. Ha kiolvasunk egy eredmnysort, a program automatikusan a kvetkezre ugrik. A mysql_fetch_row() fggvnnyel kiolvashatjuk a bels mutat ltal hivatkozott sort az eredmnytblbl. A fggvny paramtere egy eredmnyazonost, visszatrsi rtke pedig egy tmb, amely a sor sszes mezjt tartalmazza. Ha elrtk az eredmnykszlet vgt, a mysql_fetch_row() fggvny false rtkkel tr vissza. A 12.5. plda a teljes tartomany tblt megjelenti a bngszben.
223
12
224
12. ra A while kifejezsben a mysql_fetch_row() fggvny visszatrsi rtkt az $egy_sor vltozba tltjk. Ne feledjk, hogy az rtkad kifejezs rtke megegyezik a jobb oldal rtkvel, ezrt a kirtkels sorn a kifejezs rtke mindig igaz lesz, amg a mysql_fetch_row() fggvny nem nulla rtkkel tr vissza. A ciklusmagban kiolvassuk az $egy_sor vltozban trolt elemeket s egy tblzat celliknt jelentjk meg azokat a bngszben. A mezket nv szerint is elrhetjk, mghozz ktfle mdon. A mysql_fetch_array() fggvny egy asszociatv tmbt ad vissza, ahol a kulcsok a mezk nevei. A kvetkez kdrszletben mdostottuk a 12.5. plda while ciklust, a mysql_fetch_array() fggvny felhasznlsval: print "<table border=1>\n"; while ( $egy_sor = mysql_fetch_array( $eredmeny ) ) { print "<tr>\n"; print "<td>".$egy_sor["email"]."</td><td>".$egy_sor["tartomany"]. "</td>\n"; print "</tr>\n"; } print "</table>\n"; A mysql_fetch_object() fggvny segtsgvel egy objektum tulajdonsgaiknt frhetnk hozz a mezkhz. A meznevek lesznek a tulajdonsgok nevei. A kvetkez kdrszletben ismt mdostottuk a krdses rszt, ezttal a mysql_fetch_object() fggvnyt hasznltuk. print "<table border=1>\n"; while ( $egy_sor = mysql_fetch_object( $eredmeny ) ) { print "<tr>\n"; print "<td>".$egy_sor->email."</td><td>".$egy_sor-> tartomany."</td>\n"; print "</tr>\n"; } print "</table>\n"; A mysql_fetch_array() s mysql_fetch_object() fggvnyek lehetv teszik szmunkra, hogy a sorbl kinyert informcikat szrjk s vgrehajtsuk sem kerl sokkal tbb idbe, mint a mysql_fetch_row() fggvny.
225
Adatok frisstse
Az adatokat az UPDATE utastssal frissthetjk, amelyet termszetesen a mysql_query() fggvnnyel kell tadnunk az adatbzis kiszolgljnak. Itt is igazak a korbban elmondottak, azaz egy sikeres UPDATE utasts nem felttlenl jelent vltozst az adatokban. A megvltozott sorok szmt a mysql_affected_rows() fggvnnyel krdezhetjk le, amelynek szksg szerint egy kapcsolatazonostt kell tadnunk. Ennek hinyban a fggvny mint azt mr megszokhattuk a legfrissebb kapcsolatra rtelmezi a mveletet. A mysql_affected_rows() fggvnyt brmely olyan SQL lekrdezs utn hasznlhatjuk, amely felteheten mdostott egy vagy tbb sort az adattblban. A 12.6. plda egy olyan programot tartalmaz, amely lehetv teszi az adatbzis karbantartja szmra, hogy brmelyik sor tartomany mezjt megvltoztassa.
12
226
12. ra
A mvelet a szoksos mdon indul: kapcsoldunk az adatbzis kiszolgljhoz s kivlasztjuk az adatbzist. Ezek utn megvizsgljuk a $tartomany s az $azonosito vltozk megltt. Ha mindent rendben tallunk, sszelltjuk az SQL utastst, amely a $tartomany vltoz rtknek megfelelen frissti azt a sort, ahol az azonosito mez tartalma megegyezik az $azonosito vltoz rtkvel. Ha nem ltez azonosito rtkre hivatkozunk vagy a krdses sorban a $tartomany vltoz rtke megegyezik a tartomany mez tartalmval, nem kapunk hibazenetet, de a mysql_affected_rows() fggvny visszatrsi rtke 0 lesz. A mdostott sorok szmt kirjuk a bngszbe.
Adatbzisok kezelse MySQL A karbantart szmra ksztnk egy HTML rlapot, amelyen keresztl elvgezheti a vltoztatsokat. Ehhez ismt a mysql_query() fggvnyt kell hasznlnunk: lekrdezzk az azonosito s tartomany oszlopok sszes elemt s beillesztjk azokat egy HTML SELECT listba. A karbantart ezltal egy lenyl menbl vlaszthatja ki, melyik bejegyzst kvnja mdostani. Ha a karbantart mr elkldte egyszer az rlapot, akkor az utoljra hivatkozott azonosito rtk mell a SELECTED mdostt is kitesszk, gy a mdostsok azonnal ltszdni fognak a menben.
227
Informcik az adatbzisokrl
Mindezidig egyetlen adatbzisra sszpontostottunk, megtanulva, hogyan lehet adatokkal feltlteni egy tblt s az adatokat lekrdezni. A PHP azonban szmos olyan eszkzzel szolgl, amelyek segtsgvel megllapthatjuk, hny adatbzis hozzfrhet az adott kapcsolaton keresztl s milyen ezek szerkezete.
12
228
12. ra
A mysql_list_dbs() fggvny visszaad egy eredmnyazonostt, amelyet paramterknt tadunk a mysql_num_rows() fggvnynek. Az gy megkapott adatbzisok szmt a $szam vltozba tltjk s felhasznljuk a for ciklusban. Az $x indexet minden lpsben eggyel nveljk, 0-tl a tallt adatbzisok szmig, majd az eredmnyazonostval egytt tadjuk a mysql_tablename() fggvnynek az adatbzis nevnek lekrdezshez. A 12.1 brn a 12.7 program eredmnye lthat egy bngszablakban.
12.1. bra
Az elrhet adatbzisok listja
Adatbzisok kezelse MySQL A mysql_list_dbs() fggvny ltal visszaadott eredmnyazonostt a mysql_query() eredmnyhez hasonlan is felhasznlhatnnk, vagyis a tnyleges neveket a mysql_fetch_row() fggvnnyel is lekrdezhetnnk. Ekkor eredmnyl egy tmbt kapnnk, melynek els eleme tartalmazn az adatbzis nevt.
229
Adatbzistblk listzsa
A mysql_list_tables() fggvnnyel egy adott adatbzis tblinak nevt soroltathatjuk fel. A fggvny paramterei az adatbzis neve s szksg szerint a kapcsolat azonostja. A visszatrsi rtk egy eredmnyazonost, ha az adatbzis ltezik s jogunk van hozzfrni. Az eredmnyazonostt mysql_tablename() vagy mysql_fetch_row() hvsokhoz hasznlhatjuk fel, a fent ltott mdon. A kvetkez kdrszlet a mysql_list_tables() fggvny segtsgvel az adatbzis sszes tbljt kirja. $eredmeny = mysql_list_tables( "pelda", $kapcsolat ); while ( $tabla_sor = mysql_fetch_row( $eredmeny ) ) print $tabla_sor[0]."<BR>\n";
12
Informcik a mezkrl
A SELECT lekrdezs utn az eredmnytbla mezinek szmt a mysql_num_fields() fggvnnyel kaphatjuk meg. A fggvny paramtere egy eredmnyazonost, visszatrsi rtke pedig egy egsz szm, amely a mezk szmt adja meg. $eredmeny = mysql_query( "SELECT * from tartomanyok" ); $mezok_szama = mysql_num_fields( $eredmeny ); A mezkhz sorszmokat rendelnk, a szmozs 0-val kezddik. A sorszm s az eredmnyazonost alapjn szmos informcit lekrdezhetnk a mezrl, belertve a nevt, tpust, legnagyobb hosszt s egyb jellemzit is. A mez nevnek lekrdezsre a mysql_field_name() fggvny szolgl. $eredmeny = mysql_query( "SELECT * from tartomanyok" ); $mezok_szama = mysql_num_fields( $eredmeny ); for ( $x=0; $x<$mezok_szama; $x++ ) mysql_field_name( $eredmeny, $x ) . "<br>\n";
230
12. ra A mez legnagyobb hosszt a mysql_field_len() fggvnnyel kaphatjuk meg. $eredmeny = mysql_query( "SELECT * from tartomanyok" ); $mezok_szama = mysql_num_fields( $eredmeny ); for ( $x=0; $x<$mezok_szama; $x++ ) mysql_field_len( $eredmeny, $x ) . "<BR>\n"; A mez egyb jellemzit a mysql_field_flags() fggvnnyel olvashatjuk ki: $eredmeny = mysql_query( "SELECT * from tartomanyok" ); $mezok_szama = mysql_num_fields( $eredmeny ); for ( $x=0; $x<$mezok_szama; $x++ ) mysql_field_flags( $eredmeny, $x ) . "<BR>\n"; Lehetsgnk van mg a mez tpusnak megllaptsra, a mysql_field_type() fggvnnyel: $eredmeny = mysql_query( "SELECT * from tartomanyok" ); $mezok_szama = mysql_num_fields( $eredmeny ); for ( $x=0; $x<$mezok_szama; $x++ ) mysql_field_type( $eredmeny, $x ) . "<BR>\n";
231
12
232
12. ra
Elszr is a szoksos mdon a MySQL kiszolglhoz kapcsoldunk, majd meghvjuk a mysql_list_dbs() fggvnyt. A kapott eredmnyazonostt tadjuk a mysql_fetch_row() fggvnynek s az $adatbazisok tmb els elembe betltjk az aktulis adatbzis nevt. Ezutn megprbljuk kivlasztani az adatbzist a mysql_select_db() fggvnnyel. Ha nincs hozzfrsi jogunk, akkor megjelentjk a hibazenetet a bngszablakban, majd a continue utastssal tovbblpnk a kvetkez adatbzisra. Ha ki tudjuk vlasztani az adatbzist, a mveletet a tblanevek kirsval folytatjuk. Az adatbzis nevt tadjuk a mysql_list_tables() fggvnynek, troljuk az j eredmnyazonostt, majd a mysql_fetch_row() fggvnnyel kiolvassuk a tblk neveit. Minden tbln a kvetkez mveletsort hajtjuk vgre: kirjuk a tbla nevt, majd sszelltunk egy SQL utastst, amely az sszes oszlopot lekrdezi az adott tblban. A mysql_query() fggvnnyel vgrehajtjuk a lekrdezst, majd az eredmnyazonost alapjn a mysql_num_fields() fggvnnyel meghatrozzuk a mezk szmt. A for ciklusban minden mezn elvgezzk a kvetkez mveletsort: belltjuk az $x vltozt, hogy az aktulis mez sorszmt tartalmazza (ez kezdetben 0). Ezutn a sorszm ismeretben meghvjuk az elz rszben trgyalt sszes ellenrz fggvnyt, eredmnyket pedig tlthat formban, tblzatba rendezve elkldjk a bngsznek. Ezeket a mveleteket minden elrhet adatbzison elvgezzk. A program egy ttekinthet szerkezeti vzlatot jelent meg a bngszablakban, amely az adott kapcsolaton keresztl elrhet sszes adatbzist, adattblt s mezt tartalmazza. A 12.2. bra a program kimenett mutatja.
233
12.2. bra
Az sszes elrhet adatbzis, tbla s mez listja
sszefoglals
Ebben az rban a MySQL adatbziskezels alapjait tanultuk meg: az adatok trolst s visszanyerst. Megtanultuk, hogyan ptsk fel a kapcsolatot a MySQL kiszolglval a mysql_connect() s mysql_pconnect() fggvnyek segtsgvel. Az adatbzist a mysql_select_db() fggvnnyel vlasztottuk ki. Ha a kivlaszts nem sikerlt, lekrdeztk a hibt a mysql_error() fggvnnyel. SQL utastsokat adtunk ki a mysql_query() fggvny segtsgvel s a fggvny ltal visszaadott eredmnyazonost segtsgvel elrtk az adatokat vagy megtudtuk a mdostott sorok szmt. A PHP MySQL fggvnyeinek segtsgvel kirattuk az elrhet adatbzisokat, tblkat s mezket, s az egyes mezkrl is bvebb informcikat szereztnk.
12
234
12. ra
Krdsek s vlaszok
Ez az ra szigoran a MySQL-re vonatkozik. Hogyan ltethetjk t ezeket a fogalmakat ms adatbzissal mkd rendszerekre? Az mSQL-kezel fggvnyek pldul szinte teljesen megegyeznek a MySQL fggvnyekkel, de ms SQL kiszolglknak is megvannak a sajt PHP fggvnyeik. SQL utastsokat minden adatbziskiszolglnak kldhetnk. Ha szabvnyos ANSI SQL-lel dolgozunk, nem lesz klnsebb problmnk az adatbziskiszolglk kztti tllskor. Hogyan rhatunk olyan kdot, amelyet knny tltetni egy msik adatbzis kiszolgl krnyezetbe? Gyakran j tlet az adatbzis-lekrdez fggvnyeket egy egyszer osztlyba vagy knyvtrba csoportostani. gy ha fel kell kszteni a kdot egy msik adatbziskezelvel val egyttmkdsre, a kdnak csak kis rszt kell trni.
Mhely
A mhelyben kvzkrdsek tallhatk, melyek segtenek megszilrdtani az rban szerzett tudst. A vlaszokat az A fggelkben helyeztk el.
Kvz
1. Hogyan kell csatlakozni a MySQL adatbziskiszolglhoz? 2. Melyik fggvny szolgl az adatbzis kivlasztsra? 3. Melyik fggvnnyel kldhetnk SQL utastst a kiszolglnak? 4. Mit csinl a mysql_insert_id() fggvny? 5. Tegyk fel, hogy kldtnk egy SELECT lekrdezst a MySQL-nek. Nevezznk meg hrom fggvnyt, amelyekkel hozzfrhetnk az eredmnyhez. 6. Tegyk fel, hogy kldtnk egy UPDATE lekrdezst a MySQL-nek. Melyik fggvnnyel llapthatjuk meg, hny sort rintett a mdosts? 7. Melyik fggvnyt kellene hasznlnunk, ha az adatbziskapcsolaton keresztl elrhet adatbzisok nevt szeretnnk megtudni? 8. Melyik fggvnnyel krdezhetjk le az adatbzisban tallhat tblk neveit?
235
Feladatok
1. Hozzunk ltre egy adattblt hrom mezvel: email (legfeljebb 70 karakter), uzenet (legfeljebb 250 karakter) s datum (a UNIX idblyegzt tartalmaz egsz szm). Tegyk lehetv a felhasznlknak, hogy feltltsk az adatbzist. 2. Ksztsnk programot, amely megjelenti az 1. pontban elksztett tbla tartalmt.
12