Ez a leírás igyekszik bemutatni a PHP és a MySQL viszonyát a kapcsolódástól egészen az első lekérdezésig.
A leírás készítésekor úgy veszem, hogy van egy webszervered, azon egy futó PHP (PHP>=4.1), egy MySQL adatbázis szerver, és mindezekhez hozzáférésed.
A következő PHP parancsokat fogjuk használni.
- mysql_connect
- mysql_error
- mysql_select_db
- mysql_query
- mysql_fetch_row
- mysql_fetch_assoc
- mysql_fetch_object
Na ha a szükséges előkészületekkel megvagyunk, akkor kezdjünk is neki.
Első körben ajánlatos lenne csatlakozni a szerverhez:
1 | mysql_connect('host', 'felhasználónév', 'jelszó'); |
Ez sok magyarázot nem igényel, az esetek nagy többségében a host az a localhost, a felhasználónevet, és jelszót pedig megkaptuk a rendszergazdától.
Azonban illik felkészülni a nem várt eseményekre is, úgyhogy rögtön egészítsük ki kis scriptünket némi hibakezeléssel.
1 2 3 4 5 | IF(!@mysql_connect("host", "felhasználónév", "jelszó")) { print "Nem lehet csatlakozni az adatbázis szerverhez. A hiba oka: " . mysql_error(); exit; } |
Rövid magyarázat: a @-cal elrejtettük az esetleges hibaüzenetek, hogy a felhasználó ne lásson semmit sem belőle, és utánna megjelenítjük a saját hiba üzenetünket.
A mysql_error -al pedig lekérdeztük a mysql-t hogy mi történt, miért nem tudtunk csatlakozni a szerverhez.
Most ha minden jól ment sikeresen csatlakoztunk a szerverhez. Ezek után meg kell mondani, hogy melyik adatbázist szeretnék használni. (Egy mySQL szerveren lehet sok adatbázis, adatbázisonként számtalan táblával, ezekben rengetek rekord tele információval).
1 | mysql_select_db("adatbázisneve"); |
Ezzel megtörtént a kiválasztás, ezt sem árt persze ellenőrizni.
1 2 3 4 5 | IF(!@mysql_select_db("adatbázisneve")) { print "Nem lehet elérni az adatbázist A hiba oka: " . mysql_error(); exit; } |
Hasznos jó tanács, ha a csatlakozást elvégző parancsokat egy külön php file-ban tároljuk, és csak egy include-dal beszúrjuk, oda ahol szükségünk van rá. A módszer előnye, hogy mindenhol rendelkezésre fog állni a kapcsolat, és hogy bármilyen információ cseréje esetén elég csak 1 helyen módosítani.
Ez az a pont, ahol fel kell bizonyos SQL alap ismeretek megléte esetén lehet tovább lépni. Ha ezek hiányoznak, kérlek néz körül ezen a lapon a többi leirás között megtalálod őket.
Jelen pillanatban van kapcsolatunk, és kiválaszott adatbázisunk, amire a kérések vonatkozni fognak.
Kérést a mysql_query(„sql_lekérdezés”) formában tudunk feltenni az adatbázisnak, az eredményül kapunk vissza egy azonosítót, arról, hogy hol találjuk a választ.
1 | $eredmeny = mysql_query("sql_lekredezes"); |
A válasz kinyeréséhez több mód is rendelkezésünkre áll. Ezek a parancsok nagyon hasonlóak, csak a végeredményül vissza kapott tömb tulajdonságai különböznek.
- mysql_fetch_row: Csak számozott tömböt ad vissza, a tömbben az elemek a query sorrendjében találhatók.
- mysql_fetch_array: Mind számozott, mind pedig nevesített(asszociativ) tömböt vissza ad, ahol a nevek megegyeznek a mysql tábla mezőinek a neveivel.
- mysql_fetch_assoc: csak nevesített tömböt ad vissza.
- mysql_fetch_object: objektumot ad vissza, melynek tulajdonságai a táblázat oszlopai.
Nézzük egy példán keresztül a dolgot!
Van egy adatbázisunk benne egy emberek táblával. A tábla felépítése a következő:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <table> <tr> <th>Nev</th> <th>Magassag</th> <th>szuletesidatum</th> <th>nem</th> </tr> <tr> <td>János</td> <td>180</td> <td>1978/11/25</td> <td>férfi</td> </tr> <tr> <td>Gábor</td> <td>160</td> <td>1976/06/12</td> <td>férfi</td> </tr> <tr> <td>Ilona</td> <td>172</td> <td>1979/10/02</td> <td>nő</td> </tr> </table> |
Lekérdezés:
1 | SELECT nev, magassag,szuletesidatum FROM emberek LIMIT 1 |
A visszakapott sor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <table> <tr> <th>Nev</th> <th>Magassag</th> <th>szuletesidatum</th> <th>nem</th> </tr> <tr> <td>János</td> <td>180</td> <td>1978/11/25</td> <td>férfi</td> </tr> </table> |
A PHP két különbőző módszere az adatok kinyerésének:
1 | $lekerdezes_row = mysql_fetch_row($eredmeny); |
$lekerdezes_assoc = mysql_fetch_assoc($eredmeny); |
A két lekérdezés ugyan azokat az eredményeket fogja hozni (természetesen), de különböző formában, míg a $lekerdezes_row igy tartalmazza az adatokat:
1 2 3 | $lekerdezes_row[1] = "János"; $lekerdezes_row[2] = "180"; $lekerdezes_row[3] = "1978/11/25"; |
Addig a $lekerdezes_assoc a következő formában tárolja adatainkat:
1 2 3 | $lekerdezes_assoc["nev"] = "János"; $lekerdezes_assoc["magassag"] = "180"; $lekerdezes_assoc["szuletesidatum"] = "1978/11/25"; |
Azonban a legtöbb esetben a lekérdezésünk több mint 1 sort ad vissza eredményül (itt most kifejezetten kértük, hogy csak 1 sort szeretnénk)
1 2 3 4 | while($adat = mysql_fetch_assoc($eredmeny)) { print $adat["mezonev"]; } |
És a while cikluson belül azt csinálunk a rendelkezésre álló adatokkal amit csak akarunk, azonban arra vigyázzunk, hogy a $eredmeny változó értékét ne írjuk felül.
Ezek után már csak egy dolog maradt hátra, hogy bezárjuk a kapcsolatunkat a mysql_close(); utasítással. Az esetek többségében ezzel nem kell foglalkozni, hiszen a php a script lefutása után automatikusan lezárja az összes nyitott kapcsolatunkat, felszabadítja a változók által foglalt memória területet.
Ezzel rövid(?) leirásunk végére értünk. A következőkben átnézzük majd, hogy miért jó ha adatbázisokat használunk, és néhány bonyolultabb lekérdezést.
kimaradt a ; és ezért nem működik. az exit után kell egy ;, így: exit;
exit helyett tehát exit;
kösz
Köszönöm hogy szóltál, javítottam a leírást.
Tudom, hogy ez a téma nem ide való igazán, de tanácsot szeretnék érni.
„charset=iso-8859-2” kódolást alkalmazok a honlapomon, és ahova beillesztek egy php kódot, ott megjelenik (ďťż ) ez a felírat. Nem tudom honnan kerül oda, és nem tudom eltüntetni, csak ha törlöm a karakter kódolást. Viszont akkor az ékezetes betűket nem tudja kiírni rendesen.
Ha valakinek van erre ötlete azt nagyon megköszönném.
UTF8 mentés probléma, BOM nélkül mentsd el a fájlokat (szerkesztőprogramban beállítható)
Köszi a segítséget. Így most már jó lett :)
P8 oldalon van egy honlapom,írtam bele regisztrációt meg bejelentkezést phpban.Regisztrálni enged,mégsem kerül bele a felhasználó az adatbázisba,és így belépni sem lehet.Mi lehet a baj?
Hibát nem jelez semmit sem.
a lekéréses rész nagyon zavaros h mit mivel kell csinálni szerintem azt nemártana szebben felépíteni
Sziasztok nekem olyan problemam van h felraktam a sql tablat phpadminba vagyis adatbazisra es elintitom a szerot de nem tud kapcsolodni a szerverhez azt hogyan tudnam megoldani hogy tudjon kapcsolodni? Aki tudna segiteni anak meg koszonem :)