Csatlakozás, kapcsolódás MySQL adatbázishoz PHP-ban (MySQLi objektumorientált, PDO és MySQLi procedurális módszerrel)
Egy korábbi cikkben már foglalkoztunk a MySQL adatbázis-műveletekkel PHP nyelv alatt, de ebben a leckében sokkal részletesebben kifejtjük egyes adatbázis-műveletek megvalósítását. Az előző cikkben csak az objektumorientált módszert mutattuk be, de ebben a cikkben mutatunk példát a procedurális és PDO módszerre is.
Ebben a cikkben már nem taglaljuk az adatbázis és a MySQL fogalmát, ha ezekről is szeretnél tanulni, akkor olvasd el az előző leckénket.
Mi az a MySQLi?
A MySQLi a PHP5-ben bemutatkozott modul, mely felületet biztosít az adatbázisszerverekhez. Lehetővé teszi a procedurális és az objektumorientált megvalósítást is. Ezt a modul a legtöbb esetben automatikusan települ a számítógépre a PHP telepítésekor. (Ha valakinek mégsem települne, akkor itt letöltheti.)
A MySQLi bővítmény használata több előnnyel jár:
- objektumorientáltság támogatása
- procedurális interfész támogatása
- előkészített utasítások támogatása
- nyomkövetés támogatása
- hibakeresés támogatása
Mi az a PDO?
A PDO a PHP Data Objects rövidítése. A PDO tulajdonképpen egy objektum az adatbázis kapcsolatok és lekérdezések egyszerűbb kezelésére. A PDO több különböző adatbázis rendszerrel képes működni, így az igazi előnye, akkor jön elő, amikor szeretnéd lecserélni az adatbázisszervered egy másikra. A PDO használatával csak apróbb módosításokat kell tennünk a kódban.
A PDO nyújtotta lehetőségek:
- támogatja az objektumorientált megvalósítást
- támogatja az előkészített utasításokat
- védelmi funkciók
Mi az az objektumorientált programozás?
Az objektumorientált programozás (angolul object-oriented programming, röviden OOP) egy az objektumokra alapozott programozási elmélet vagy szemlélet. Az objektumok egységbe foglalják az adatokat és a velük kapcsolatos műveleteket. Az adatokat tulajdonságoknak, míg a műveleteket függvényeknek, illetve metódusoknak szoktuk nevezni. Az objektum az objektumorientált programozás egyik alapeleme.
Mi az a procedurális programozás?
A procedurális programozás (vagy eljárás orientált programozás) egy programozási alapelv, melynek alapja a modularitás és a hatókör. A procedurális programozás során azt az alapelvet követjük, hogy a konkrét programozási feladatot több kisebb egységre, avagy eljárásra bontsuk. Ezek az eljárások a kódban jól körülhatárolt egységek (függvény, metódus), melyeknek vannak elnevezéseik, jellemzőik és akár visszatérési értékeik is. A program futása során a főprogramban ezek az elkészített eljárások kerülnek meghívásra.
Kapcsolódás MySQL adatbázishoz objektumorientált módon (connect) szintaxis
Legelőször kezdjük az objektumorientált módszerrel. Ha elkészítettük az adatbázist, akkor a PHP-ban mielőtt nekilátnánk lekérdezéseket írni vagy adatokat hozzáadni PHP-ból, előtte mindenképp csatlakoznunk kell az adatbázishoz. Az adatbázisunknak minden esetben lennie kell egy szervercímének, egy felhasználónevének és egy jelszavának.
new mysqli(SZERVERCÍM, FELHASZNÁLÓNÉV, JELSZÓ)
Code language: PHP (php)
A kapcsolódás valójában ebből az egyetlen egy sorból áll, de a lenti példából látni fogjátok, hogy érdemes még pár sorral kiegészíteni, hogy a kódunk átláthatóbb, könnyebben módosítható és minden igényt kielégítő legyen.
Példa MySQL adatbázis csatlakozáshoz, kapcsolódáshoz objektumorientáltan PHP nyelv alatt
PHP kód
<?php
// adatok felvétele a kapcsolathoz
$servername = "localhost";
$username = "felhasznalo";
$password = "jelszo";
$dbname = "adatbazis";
$conn = new mysqli($servername, $username, $password); // kapcsolat létrehozása
// kapcsolódás ellenőrzése
if ($conn->connect_error) {
die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
} else {
echo "Sikeres kapcsolódás."; // sikeres kapcsolódás
}
?>
Code language: PHP (php)
A fenti példában láthatjuk, hogy a legelején felvesszük az adatbázis kapcsolódáshoz szükséges adatokat (szervercím, felhasználónév, jelszó, adatbázisnév) különböző változókba, melyeket egy sorral lentebb behelyettesítünk a „mysqli” kapcsolatlétesítési függvénybe. Mindezt elmentjük egy változóba, hogy pár sorral lejjebb letudjuk ellenőrizni, hogy a kapcsolódás sikeres volt-e vagy sem.
Érdemes megemlíteni, hogy az adatbázishoz való csatlakozásnak PHP-ban nincs szemmel látható eredménye.
Kapcsolódás MySQL adatbázishoz MySQLi procedurális programozással (connect) szintaktika
A következő bemutatandó példa a MySQL adatbázishoz való csatlakozásról procedurális megvalósítással történik. Itt sem kell nagyon eltérő kódra számítani, valójában csak pár kulcsszót kell átírnunk.
mysqli_connect(SZERVERCÍM, FELHASZNÁLÓNÉV, JELSZÓ)
Code language: PHP (php)
Az előző példából a „new mysqli” kulcsszót lecseréljük a „mysqli_connect”-re és kész.
Példa MySQL adatbázishoz való csatlakozásról, kapcsolódásról procedurálisan PHP nyelv alatt
PHP kód
<?php
// adatok felvétele a kapcsolathoz
$servername = "localhost";
$username = "felhasznalo";
$password = "jelszo";
$dbname = "adatbazis";
$conn = mysqli_connect($servername, $username, $password, $dbname); // kapcsolat létrehozása
// kapcsolódás ellenőrzése
if ($conn) {
echo "Sikeres kapcsolódás."; // sikeres kapcsolódás
} else {
die("Sikertelen kapcsolódás: " . $mysqli_connect_error()); // sikertelen kapcsolódás
}
?>
Code language: PHP (php)
Ebben a példában is először kiszerveztük az adatbázis fontosabb adatait különböző változókba, hogy a kódunk átláthatóbb legyen, illetve később egyszerűbb legyen módosítani. Majd a „$conn” változóba meghívjuk a „mysqli_connect” függvényt, melynek paraméterekként megadjuk a fent felvett változókat. Majd végezetül ellenőrizzük, hogy a kapcsolódás, csatlakozás sikeres volt-e. Itt a „$conn” változót vizsgáljuk, ha a változó igaz értékkel tér vissza, akkor egyszerűen visszajelezzük, hogy a csatlakozás sikeres volt. Ha hibával tér vissza, akkor kiírjuk, hogy sikertelen kapcsolódás, majd hozzáfűzzük a hibaüzenetet.
Kapcsolódás MySQL adatbázishoz PDO-val (connect) szomtaxos
Végül, de nem utolsósorban pedig nézzük meg, hogy hogyan hozhatunk létre adatbáziskapcsolatot PDO segítségével. Itt azért egy kicsit már másképp fog kinézni a művelet.
new PDO("mysql:host=SZERVERCÍM;dbname=ADATBÁZISNÉV", FELHASZNÁLÓNÉV, JELSZÓ)
Code language: PHP (php)
Ebben az esetben a szintaxis a fent látható kódsorra módosul. Elsőre kicsit durvának tűnhet, de haladjunk sorról sorra. Először megadjuk a „new PDO” kulcsszót, majd nyitunk egy zárójelet, ahova egy idézőjel után beírjuk, hogy „mysql:host=”, ez fogja definiálni, hogy mi egy MySQL kapcsolatot szeretnénk készíteni, a host azt jelöli, hogy e mögé jön a szerverünk címe. Majd írunk egy pontosvesszőt és ezt követi a „dbname” kulcsszó, ide kell beírnunk annak az adatbázisnak a nevét, amelyhez kapcsolódni szeretnénk. Itt kitesszük a záróidézőjelet, majd írunk egy vesszőt és szimplán megadjuk az adatbázisunkhoz tartozó felhasználónevet és jelszót.
Hibakezelés beállítása:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
Code language: CSS (css)
Lehetőségünk van arra is, hogy módosítsuk az alapértelmezett hibakezelési beállításokat. Az első paraméter a hibavisszajelzést kapcsolja be, amely a legtöbb esetben nélkülözhetetlen, míg a második paraméter pedig azt mondja meg a PDO-nak, hogy dobjon kivételt, amikor egy lekérdezés hibára fut.
Példa PDO-s kapcsolódásra MySQL adatbázishoz
PHP kód
<?php
// adatok felvétele a kapcsolathoz
$servername = "localhost";
$username = "felhasznalo";
$password = "jelszo";
$dbname = "adatbazis"
// megpróbálunk csatlakozni a "try"-ban, ha nem sikerül, akkor elkapjuk a hibát a "catch"-ben
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // PDO kapcsolat létrehozása
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // hibakezelés beállítása
echo "Sikeres csatlakozás."; // sikeres csatlakozás visszajelzés
} catch (PDOException $e) {
echo "Sikertelen csatlakozás: " . $e->getMessage(); //visszajelzés sikertelen csatlakozásról
}
?>
Code language: PHP (php)
A PDO-s megoldásnál is felvesszük a fontosabb adatbázis adatokat külön-külön változókba. Itt viszont belép egy újdonság a képbe, ez pedig nem más, mint a try-catch szerkezet. A try-catch úgy működik, hogy megpróbálunk valamit végrehajtani (try), majd megpróbáljuk a lehetséges hibákat elkapni (catch). Ezt egyébként kivételkezelésnek nevezzük. Szóval megpróbálunk csatlakozni az adatbázishoz a fent említett PDO kapcsolódási utasítással, majd beállítjuk a hibakezelés/kivételkezelés végrehajtását, majd kiíratjuk, hogy sikerrel jártunk. Ha mindezek alatt valami hibába futottunk volna, akkor átugrottunk volna a „catch” részhez, ahol kiíratjuk, hogy mi a hiba oka.