Rekord módosítása MySQL adatbázis táblájában PHP nyelv alatt (MySQLi objektumorientált, PDO és MySQLi procedurális módszerrel)
Egy korábbi leckében már foglalkoztunk MySQL adatbázis-műveletekkel PHP nyelv alatt, de ebben a cikkben sokkal részletesebben kifejtjük egyes adatbázis-műveletek megvalósítását. Az előző PHP leckében csak az objektumorientált megvalósítást mutattuk be, de ebben a cikkben mutatunk példát a procedurális és PDO-s megvalósításra is.
Ebben a cikkben már nem ismertetjük az adatbázis és a MySQL fogalmát, ha ezekről is szeretnél többet tudni, akkor olvasd el a korábbi PHP-MySQL leckénket.
Az előző leckében hozzáadtunk egy új rekordot a táblánkhoz, ebben pedig megmutatjuk, hogy hogyan tudtok meglévő rekordokat módosítani.
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 előnyei:
- 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 a MySQLi?
A MySQLi a PHP5-tel megjelenő modul, amely felületet biztosít az adatbázisszerverekkel végzett műveletek végrehajtásának. Lehetővé teszi a procedurális és az objektumorientált megvalósítást is. Ezt a modul a PHP telepítésekor általában automatikusan települ a számítógépekre. (Ha valakinek mégsem történt volna meg, akkor itt letöltheti és telepítheti.)
A MySQLi előnyei:
- támogatja az objektumorientált megvalósítást
- támogatja a procedurális interfészt
- támogatja az előkészített utasításokat
- támogatja a nyomkövetést
- támogatja a hibakeresést
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.
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 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, metódusoknak nevezzük. Az objektum az objektumorientált programozás alapeleme.
Rekord módosítása MySQL adatbázisban (UPDATE)
Nem csak arra van lehetőségünk, hogy adatokat vigyünk fel a táblába, hanem arra is, hogy egy már meglévő rekord értékeit módosítsuk.
SQL szintaktika rekord módosításakor
UPDATE táblanév
SET mező1=érték1, mező2=érték2 ...
WHERE feltétel
Code language: SQL (Structured Query Language) (sql)
Fontos, hogy olyan feltételt írjunk, amely csak a módosítandó rekord(ok)ra terjed ki, mert ha a feltételünk nem megfelelően meghatározott, akkor olyan rekord(ok) is módosulhat(nak), amely(ek)nek nem kellene.
Rekord (sor) módosítása táblában objektumorientált módon (UPDATE)
Legelőször nézzük meg a fentebb említett objektumorientált megvalósítás lépéseit.
Szintaktika
KAPCSOLAT->query(SQL.KÓD);
Code language: CSS (css)
Objektumorientált programozás esetében bármilyen SQL utasítás (új rekord felvitele, törlése, módosítása) végrehajtása során a használni kívánt kapcsolatunkra (alábbi példánkban „$conn”) kell meghívni a „query()” függvényt, melynek az SQL utasítás az egyetlen paramétere. Az SQL utasításokat érdemes egy változóba kiszervezni és azt átadni paraméterként.
Példa rekord módosítására MySQL adatbázisban 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, $dbname); // 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 a kapcsolódás
}
// rekordmódosító SQL kód
$sql = "UPDATE programnyelvek SET nev='Python', megjelenesi_ev='1991-02-20' WHERE nev='Java'";
// rekord módosításának végrehajtása és ellenőrzése
if ($conn->query($sql) === false) {
echo "A rekord módosítása nem sikerült: " . $conn->error;
} else {
echo "Sikeres rekordmódosítás.";
}
// kapcsolat lezárása
$conn->close();
?>
Code language: PHP (php)
Először megírjuk a rekord módosítását végrehajtó SQL utasítást, amelyet elmentünk az „$sql” változóba. Lentebb a „$conn->query($sql)” utasítással végrehajtjuk a módosítást. Ugyanitt az eredményét és vizsgáljuk. Ha sikerrel fut le, akkor kiírjuk, hogy sikerrel jártunk, de ha valamilyen hiba folytán a módosítást nem sikerül végrehajtani, akkor erről is értesítjük a felhasználót.
Az SQL utasítás magyarázata: Frissítjük („UPDATE”) a „programnyelvek” tábla tartalmát. Beállítjuk („SET”) a „nev” oszlopot/mezőt „Python”-ra és a „megjelenesi_ev” oszlopot, mezőt „1991-02-20”-ra, ott ahol a „nev” mező egyenlő „Java”-val.
Rekord módosítása procedurális megvalósítással (update)
Az objektumorientált verzió után nézzük meg a rekord módosításának a procedurális megvalósítását.
Szintaxis
mysqli_query(KAPCSOLAT, SQL.UTASÍTÁS);
Code language: CSS (css)
Emlékezzünk rá, hogy bármilyen SQL utasítást (új rekord felvitele, törlése, módosítása) szeretnénk végrehajtani procedurálisan, mindig a „mysqli_query” függvénnyel tehetjük meg, melynek az első paramétere a kapcsolat, míg a második a végrehajtandó SQL kód.
Rekord módosítása, frissítése adatbázisban procedurális megvalósítással PHP nyelvben
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
}
// rekordmódosító SQL kód
$sql = "UPDATE programnyelvek SET nev='Python', megjelenesi_ev='1991-02-20' WHERE nev='Java'";
if (mysqli_query($conn, $sql)) { // SQL kód futtatása és sikerességének ellenőrzése
echo "Rekord módosítása sikeres.";
} else {
echo "A rekord módosítása során hiba lépett fel: " . mysqli_error($conn);
}
mysqli_close($conn); // kapcsolat lezárása
?>
Code language: PHP (php)
Csakúgy, mint az objektumorientált esetben, itt is először megírjuk az SQL utasítást, amelyet egy változóba mentünk el. Illetve itt is egyszerre hajtjuk végre az SQL utasítás végrehajtását („mysqli_query($conn, $sql)”) és a sikerességének a vizsgálatát.
Az SQL utasítás magyarázata: Frissítjük („UPDATE”) a „programnyelvek” tábla tartalmát. Beállítjuk („SET”) a „nev” oszlopot/mezőt „Python”-ra és a „megjelenesi_ev” oszlopot, mezőt „1991-02-20”-ra, ott ahol a „nev” mező egyenlő „Java”-val.
Rekord módosítása MySQL adatbázis táblájában PDO segítségével (UPDATE)
Először megnéztük objektumorientáltan, majd procedurálisan a rekord módosítását, most itt az ideje a legjobban ajánlott megoldás megtekintésének.
Rekordmódosító szintaktika PDO esetében
KAPCSOLAT->exec(SQL.KÓD);
Code language: CSS (css)
Fontos tudni, hogy bármilyen SQL utasítást (új rekord felvitele, törlése, módosítása) szeretnénk végrehajtani egy PDO-s kapcsolat során, mindig az „exec” függvényt kell meghívnunk a kapcsolatra vonatkozóan, melynek egy paramétere van, maga SQL utasítás.
Sor, azaz rekord módosítása PDO-s megvalósítással PHP környezetben
PHP kód
<?php
// adatok felvétele a kapcsolathoz
$servername = "localhost";
$username = "felhasznalo";
$password = "jelszo";
$dbname = "adatbazis"
// megpróbáljuk végrehajtani az adatbázisműveleteket, 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
// rekordmódosító SQL utasítás
$sql = "UPDATE programnyelvek SET nev='Python', megjelenesi_ev='1991-02-20' WHERE nev='Java'";
$conn->exec($sql); // itt hajtjuk végre az SQL utasítást, amely módosítja a rekordot
echo "Sikeres művelet.";
} catch (PDOException $e) {
echo "Sikertelen művelet.: " . $e->getMessage();
}
$conn = null; // kapcsolat lezárása
?>
Code language: PHP (php)
Csakúgy mint eddig itt is a $sql változóba szerveztük ki a módosító utasításunkat, melyet lentebb az „exec” függvény segítségével hajtottunk végre.
Az SQL utasítás magyarázata: Frissítjük („UPDATE”) a „programnyelvek” tábla tartalmát. Beállítjuk („SET”) a „nev” oszlopot/mezőt „Python”-ra és a „megjelenesi_ev” oszlopot, mezőt „1991-02-20”-ra, ott ahol a „nev” mező egyenlő „Java”-val.