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.

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.

  1. 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.
  2. mysql_fetch_assoc: csak nevesített tömböt ad vissza.
  3. 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

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.

  1. naxa

    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

  2. Harderszerzőblog.harder.hu

    Köszönöm hogy szóltál, javítottam a leírást.

  3. Viki

    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.

    1. Harderszerzőblog.harder.hu

      UTF8 mentés probléma, BOM nélkül mentsd el a fájlokat (szerkesztőprogramban beállítható)

  4. Viki

    Köszi a segítséget. Így most már jó lett :)

  5. Kidlacee

    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.

  6. sivi151

    a lekéréses rész nagyon zavaros h mit mivel kell csinálni szerintem azt nemártana szebben felépíteni

  7. kmg

    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