A PHP programozási nyelv

MySQL Adatbáziskezelés

Bevezetés

A PHP nyelv nagyon fontos és erős tulajdonsága, hogy nagyon gyorsan és könnyen tud különféle adatbázisokhoz kapcsolódni és természetesen kezelni azokat. Ahogy a cím is mutatja ez a szekció a MySQL adatbázis kezelésével foglalkozik. Azért esett a választás a MySQL adatbázisra, mert ingyenes, ugyanakkor gyors, hatékony és professzionális tulajdonságokkal bír. Ha mélyebben elmerülünk a PHP nyelv adottságaiban, rádöbbenünk, hogy a nyelv által támogatott összes adatbázist hasonló függvények segítségével kezelhetjük valamint érhetjük el.

Csatlakozás a kiszolgálóhoz

Ahhoz, hogy bármilyen műveletet végezhessünk az adatbázison, először csatlakoznunk kell hozzá. A PHP erre a mysql_connect() beépített függvényt használja. A függvény paraméterlistája három karakterláncot vár. Ezek sorra egymás után: a szervergép –ahol az adatbázisszerver fut- neve, felhasználói név és egy jelszó. Ha a függvényt paraméterlista nélkül használjuk, akkor alapértelmezésként a localhost gazdagép nevet, a php-t futtató felhasználót és egy üres karakterláncot használ a függvény. Ez természetesen a php konfigurációs fájljában a php.ini –ben átállítható. A függvény sikeres lefutás esetén egy kapcsolatazonosítóval tér vissza, ami ahhoz szükséges, hogy a későbbiekben, ha esetleg több kapcsolaton keresztül dolgozunk, meg tudjuk különböztetni azokat.

A függvény szintaktikája:

$kapcsolat = mysql_connect( "localhost", "root", "jelszo" );
if ( ! $kapcsolat ) die( "Nem lehet csatlakozni a MySQL szerverhez!" );

Lehetőségünk van adatbáziskapcsolatot létrehozni a mysql_pconnect() függvénnyel is. A két függvény között fontos eltérés, hogy a pconnect –el történő csatlakozás nem szakad meg a php program lefutásával vagy a mysql_close() hatására sem. E függvény használatával időt takaríthatunk meg, ami egy esetlegesen új kapcsolat felállításához szükséges

Adatbázis kiválasztása

Ha sikeresen csatlakoztunk az adatbázishoz, ki kell választanunk azt az adatbázist, amin dolgozni szeretnénk. Erre a célra szolgál a mysql_select_db() függvény. A függvény két értéket vár paraméterül, egyik a kiválasztandó adatbázis neve, másik pedig egy kapcsolatazonosító. Az utóbbi paraméter opcionális, ha nem adjuk meg, a függvény az utoljára megnyitott kapcsolaton hajtódik végre. A függvény igaz értékkel tér vissza, ha az adatbázis létezik és van jogunk használni.
A db1 nevű adatbázis kiválasztásának szintaktikája:

$adatbazis = "db1";
mysql_select_db( $adatbazis ) or die ( "Nem lehet megnyitni a következõ adatbázist: $adatbazis" );

Hibakezelés

Az előzőekben egy függvény lefutása esetén ellenőrzésre került a visszatérési érték, és hiba esetén a die() függvénnyel meg lett szakítva a program futása valamint generálásra került valamilyen aktuális hibaüzenet a felhasználónak. Ez azonban nem valódi hibakezelés. A php két beépített függvényt tartalmaz a különféle hibakódok valamint hibaüzenetek kezelésére. Minden hibához tartozik egy hibakód, amit a mysql_errno() függvénnyel valamint egy hibaüzenet, amit a mysql_error() függvénnyel érhetünk el.
A db1 adatbázis kiválasztása valódi hibakezeléssel:

$adatbazis = "db1";
mysql_select_db( $adatbazis ) or die ( "Nem lehet megnyitni a $adatbázist: ".mysql_error() );

Adatok beszúrása táblába

Ha sikerült megnyitni valamint kiválasztani a kívánt adatbázisunkat, különféle műveleteket végezhetünk rajta. A kiválasztott adatbázis, három mezőt tartalmaz: id, nev, email. Ahhoz, hogy hozzáadjunk egy sort a táblához, össze kell állítani és lefuttatni egy SQL parancsot. Az SQL parancsok lefuttatására a php a mysql_query() függvényt használja. A függvény két adatot vár paraméterként. Egy SQL parancsot tartalmazó karakterláncot valamint egy opcionális kapcsolatazonosítót. Ez utóbbi elhagyása esetén az utoljára megnyitott adatbázis az alapértelmezett. Ha a függvény sikeresen lefutott, akkor pozitív értékkel tér vissza, ha azonban hibásan adtuk meg az SQL parancsot vagy nincs jogunk az adatbázishoz, hamis értéket kapunk. Fontos lehet, hogy egy esetlegesen sikeresen lefutó SQL utasítás nem feltétlenül okoz változást a táblában. Pl. SELECT utasítás.
A users adatbázis szerkezete:

CREATE TABLE users (
azonosito INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY( azonosito ),
username VARCHAR( 20 ),
email VARCHAR( 20 ) );

Egy új sor felvitele a users táblába:
$parancs = "INSERT INTO users ( username, email) VALUES ( '$username', '$email' )";
mysql_query( $parancs, $kapcsolat );

AutoiIncrement mező értékének lekérdezése

Az insert utasítás nem ad értéket a users tábla id mezőjének. Erre azért nincs szükség, mert a tábla e mezője auto increment tulajdonságokkal bír, ami azt jelenti, hogy adatok beszúrásával automatikusan növekszik. Felmerülhet a kérdés, hogy hogyan lehet elérni e mezők értékét. Egyik lehetőségünk, hogy lekérdezzük egy SQL utasítással, a kívánt sor id értékét. Ez azonban bonyolult és időigényes feladat. A php tartalmaz egy mysql_inser_id() nevű függvényt melynek segítségével azonnal lekérdezhetjük az utoljára lefutott insert utasítás automatikusan növekvő mezőjének értékét. Szükség esetén megadhatunk neki egy kapcsolatazonosítót, azonban ha ez lemarad a szokásos módon az utoljára megnyitott kapcsolaton keresztül jár el a függvény
Az insert utasítás auto increment mezőjének lekérdezése:

$parancs = "INSERT INTO users ( username, email) VALUES ( '$username', '$email' )";
mysql_query( $parancs, $kapcsolat );
$azonosito = mysql_insert_id();
print "Köszönjük. Az Ön regisztrációs azonosítója: $azonosito. Jegyezze meg további ügyintézéshez.";

Lekérdezések

Az adatok visszanyerésére szintén a mysql_query() utasítás kiadása szolgál, csak a paraméterében átadott SQL utasításban tér el a beszúrástól. Egy select utasítást kell kiadnunk. Ha sikeresen lefutott a query a selectel, a függvény egy eredményazonosítót ad vissza, melynek felhasználásával elérhetjük az eredménytáblát és információkat nyerhetünk ki belőlle.

Eredménytábla sorainak száma

A select utasítás által visszaadott tábla sorainak a számát a mysql_num_rows() függvény segítségével kaphatjuk meg. A függvény paraméterül vár egy eredményazonosítót, visszatérési értéke pedig az eredménytábla sorainak a száma
A users tábla sorainak a száma:

mysql_select_db( $adatbazis, $kapcsolat ) or die ( "Nem lehet megnyitni a $adatbazis adatbázist: " . mysql_error() );
$eredmeny = mysql_query( "SELECT * FROM users" );
$sorok_szama = mysql_num_rows( $eredmeny );
print "$sorok_szama sor található a táblában";

Eredménytábla elérése

Ha végeztünk a select lekérdezéssel, és megkaptuk az eredményazonosítót, egy ciklus használatával férhetünk hozzá az eredménytábla soraihoz. A php egy belső mutató használatával tartja nyilván, hogy melyik volt az utoljára olvasott sor. Ha kiolvasunk egy újabb sort, a program automatikusan a következőre ugrik.
A mysql_fetch_row() függvény segítségével kinyerhetjük a belső mutató által mutatott sort az eredménytáblából. A függvény paramétere egy eredményazonosító, visszatérési értéke pedig egy tömb, mely tartalmazza a sor összes mezőjét. Ha az utolsó mezőre értünk a mysql_fetch_row() hamis értékkel tér vissza.
A users tábla sorainak kiírása

$eredmeny = mysql_query( "SELECT * FROM users");
$sorok_szama = mysql_num_rows( $eredmeny );
print "Jelenleg $sorok_szama sor van a táblában";
while ( $egy_sor = mysql_fetch_row( $eredmeny ) ){
foreach ( $egy_sor as $mezo )
print "$mezo";
}

Update művelet

A táblákban lévő adatainkat az update utasítással módosíthatjuk, amit szintén a mysql_query() függvény segítségével futtathatunk le. Itt is elmondható az, hogy egy sikeres update nem feltétlenül változtatja meg a tábla tartalmát. A megváltoztatott sorok számát a mysql_affected_rows() függvénnyel érhetjük el, melynek opcionálisan egy kapcsolatazonosítót adhatunk meg. Ennek hiányában a függvény a szokásos módon viselkedik. A függvényt bármilyen SQL utasítás után kiadhatjuk, amely feltehetően valamilyen változást okozott a táblában.
Egy egyszerű táblamódosító program kódja:

if ( isset( $username ) && isset( $azonosito ) ) {
$parancs = "UPDATE users SET username ='$username' WHERE azonosito=$azonosito";
$eredmeny = mysql_query( $parancs );
if ( ! $eredmeny ) die (" A módosítás sikertelen: ".mysql_error());
print "A módosítás sikeres, ". mysql_affected_rows() . " db sor változott";}

Információkérés az adatbázisról

A php rengeteg olyan eszközzel rendelkezik, amelyek segítségével megtudhatunk számos információt különböző adatbázisokról. Többek között megtudhatjuk, hány adatbázis hozzáférhető számunkra az adott kapcsolaton keresztül valamint milyen ezek szerkezete.

Elérhető adatbázisok listázása

A php mysql_list_dbs() függvény használatával kilistázhatjuk az összes adatbázist amely az adott kapcsolaton keresztül hozzáférhető. A függvény egy kapcsolatazonosítót vár paraméterül, visszatérési értéke pedig egy eredményazonosító. A különböző adatbázisok neveit a mysql_tablename() függvény segítségével nyerhetjük ki, melynek paramétere az előbbi eredményazonosító valamint az adatbázis sorszáma. Visszatérési értéke pedig az adatbázis neve. Az adatbázisok indexelése 0 val kezdődik. Az összes adatbázis számát a mysql_list_dbs() függvény után lefuttatott mysql_num_rows()függvény adja meg.
Az elérhető adatbázisok kilistázása:

$adatbazis_lista = mysql_list_dbs( $kapcsolat );
$szam = mysql_num_rows( $adatbazis_lista );
for( $x = 0; $x < $szam; $x++ )
print mysql_tablename( $adatbazis_lista, $x );
mysql_close( $kapcsolat );

Adatbázistáblák listázása

A mysql_list_tables() függvény segítségével egy adott adatbázis tábláinak nevét listázhatjuk ki. A függvény paramétere az adatbázis neve és opcionálisan egy kapcsolatazonosító. Ennek hiányában a függvény a szokásos módon viselkedik. Visszatérési értéke pedig egy eredményazonosító, ha az adatbázis létezik és jogunk van hozzáférni.
Adatbázis összes táblájának kilistázása:

$eredmeny = mysql_list_tables( "pelda", $kapcsolat );
while ( $tabla_sor = mysql_fetch_row( $eredmeny ) )
print $tabla_sor[0];

Információszerzés mezőkről

Különböző mezőkhöz különböző sorszámokat rendelünk. A számozás 0 val kezdődik. Eme sorszám és az eredményazonosító segítségével számos információt lekérdezhetünk az adott mezőről. Többek között a nevét, típusát, legnagyobb hosszát és egyéb jellemzőit.
Mező nevének lekérdezése:

$eredmeny = mysql_query( "SELECT * from users" );
$mezok_szama = mysql_num_fields( $eredmeny );
for ( $x=0; $x<$mezok_szama; $x++ )
mysql_field_name( $eredmeny, $x );

Mező legnagyobb hosszának lekérdezése:
$eredmeny = mysql_query( "SELECT * from users" );
$mezok_szama = mysql_num_fields( $eredmeny );
for ( $x=0; $x<$mezok_szama; $x++ )
mysql_field_len( $eredmeny, $x );

Mező típusának lekérdezése:
$eredmeny = mysql_query( "SELECT * from users" );
$mezok_szama = mysql_num_fields( $eredmeny );
for ( $x=0; $x<$mezok_szama; $x++ )
mysql_field_type( $eredmeny, $x );

Egyéb jellemzők lekérdezése:
$eredmeny = mysql_query( "SELECT * from users" );
$mezok_szama = mysql_num_fields( $eredmeny );
for ( $x=0; $x<$mezok_szama; $x++ )
mysql_field_flags( $eredmeny, $x );