A MySQL adatbázishoz való csatlakozás, és annak használata

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:

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.

  1. mysql_fetch_row: Csak számozott tömböt ad vissza, a tömbben az elemek a query sorrendjében találhatók.
  2. 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.
  3. mysql_fetch_assoc: csak nevesített tömböt ad vissza.
  4. 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></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.

8 HOZZÁSZÓLÁS

  1. kimaradt a ; és ezért nem működik. az exit után kell egy ;, így: exit;

    1
    2
    3
    4
    5
    
    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. 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.

  3. 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.

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

  5. 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 :)

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét