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.

Kapcsolódó bejegyzések:
  • Ahogy belépek egy magyar nyelvű fórumba ahol webszerkesztés téma is van, olyan nincs, hogy ne találjak olyan kérdést, hogy “Keresés, hogyan?”. Most erre talász i …

  • A minap ráfutottam arra, hogy a szokásos számos lapozó helyett (1-10 || 11-20 … stb ) ABC-s kell a megrendelőnek. Az adatbázisában szereplő személyeket akarja …

  • Manapság egy PHP alpú, motorú oldalon alapvető dolgok közé tartozik az űrlap feldolgozás. Az összes olyan oldalon ahol adatot küldünk el a szervernek (bejelentk …

  • Ez egy hírküldő script. Működése nagyon egyszerű. Mindössze 3 fájlból áll, és adatbázis alapú a hírek tárolása. A dbconnect.php segítségével kapcsolódik az adat …

  • A PHP nyelvről szóló sorozatunknak ebben a részében a tömböket fogom bemutatni. A PHP tömb vagy eredeti nevén array egy úgynevezett összetett változó típus. Az ö …

A cikket beküldte: Harder (http://blog.harder.hu)

8 hozzászólás

  1. naxa says:

    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. Harder says:

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

  3. Viki says:

    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.

  4. Harder says:

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

  5. Viki says:

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

  6. Kidlacee says:

    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.

  7. sivi151 says:

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

  8. kmg says:

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

Szólj hozzá
a A MySQL adatbázishoz való csatlakozás, és annak használata c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>