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)

Ebben a leckében bemutatjuk, hogy hogyan kell egy MySQL adatbázis táblájában rekordokat módosítani PHP nyelvben. Példákon keresztül bemutatjuk a MySQLi objektumorientált, a PDO és a MySQLi procedurális megvalósítást.

MySQL adatbázis-műveletek a PHP-ban (adatbázis-kapcsolat létrehozása, bezárása, tábla létrehozása, rekord hozzáadása, törlése, módosítása, lekérdezések írása) című cikk borítóképe

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.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!