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:
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.
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).
mysql_select_db("adatbázisneve");
Ezzel megtörtént a kiválasztás, ezt sem árt persze ellenőrizni.
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.
$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. 1. 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ő:
<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:
SELECT nev, magassag,szuletesidatum FROM emberek LIMIT 1
A visszakapott sor:
<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:
$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:
$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:
$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)
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.
Harder
Profil
Korábbi hozzászólások (8)
A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.
kimaradt a ; és ezért nem működik. az exit után kell egy ;, így: exit;
f(!@mysql_select_db("adatbázisneve"))
{
print "Nem lehet elérni az adatbázist A hiba oka: " . mysql_error();
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 :)
Van hozzáfűznivalód? Írj nekem közvetlenül.
Kapcsolat